如何使用SAS PROC SQL删除STU_KEY前缀为2002至2006的行
原代码错误原因
LIKE运算符仅支持字符类型字段匹配,若STU_KEY为数值类型,原筛选条件会完全失效- 无聚合逻辑下滥用
GROUP BY:你没有使用COUNT/SUM等聚合函数,GROUP BY会导致SAS默认对非分组字段STU_KEY、STU_CODE做隐式聚合,返回异常结果 - 反向排除逻辑冗余:相比排除2002-2006,直接正向匹配目标年份2007、2008的逻辑更严谨,不会出现后续新增其他年份时误纳入数据的问题
正确实现方案
情况1:STU_KEY为字符类型
PROC SQL; CREATE TABLE a.stu_2007_2008 as SELECT STU_ID, STU_KEY, STU_CODE FROM a.stu /* 截取前4位直接匹配目标年份 */ WHERE SUBSTR(STU_KEY, 1, 4) IN ('2007', '2008'); QUIT;
也可以用LIKE写法实现相同效果:
WHERE STU_KEY LIKE '2007%' OR STU_KEY LIKE '2008%'
情况2:STU_KEY为数值类型
PROC SQL; CREATE TABLE a.stu_2007_2008 as SELECT STU_ID, STU_KEY, STU_CODE FROM a.stu /* 数值运算取前四位,效率更高 */ WHERE INT(STU_KEY/10000) IN (2007, 2008); QUIT;
内容的提问来源于stack exchange,提问作者Plutos
相关产品推荐
相关产品推荐

