SAS缺失值统计代码疑问解析:关键语句与结果优化
SAS缺失值统计代码疑问解答
1. Proc SQL中separated by ' ' from names的含义
这里是用SQL的字符串聚合功能,把查询到的目标变量名(比如从dictionary.columns筛选出的数值/字符型变量)用空格拼接成完整字符串。比如筛选出mpg_city、horsepower、weight三个变量的话,最终会得到mpg_city horsepower weight这样的结果。这种操作一般是为了生成动态代码——比如把拼好的变量名套进数组定义里,实现批量处理所有目标变量。
2. Data Missing步骤中keep _:的作用、_:的含义,以及_BIGN = 1是否必要
_:是SAS的变量名通配符,代表所有以下划线开头的变量。keep _:的作用就是只保留数据集中所有下划线开头的变量,过滤掉其他无关变量,减少数据集体积或者避免干扰后续处理。_BIGN = 1是否必要看代码逻辑:如果这个变量只是用来标记数值型变量组(比如区分数值/字符缺失统计的分组标识),但后续输出或分析用不到它,那完全可以删掉,不影响缺失值统计的核心功能;如果代码里有依赖这个变量的判断逻辑(比如后续按_BIGN分组汇总),那它就是必要的。
3. 去除最终输出表smry_中变量名前的下划线,同时保证行数完整
有两种简单实现方式:
方式一:从源头避免下划线
在生成统计变量时,直接给变量命名不带下划线。比如原来生成_num_missing的地方改成num_missing,后续输出的变量自然就没有下划线,完全不影响行数。
方式二:批量重命名已有变量
如果已经生成了带下划线的变量,用批量重命名处理,不会删除任何观测,保证行数完整:
Data Step重命名(适合变量少的情况)
data smry_clean; set smry_; rename _num_miss=num_miss _char_miss=char_miss; /*逐一对应修改变量名*/ run;
Proc SQL+Proc Datasets批量重命名(适合变量多的情况)
/*自动生成重命名语句*/ proc sql noprint; select cats(name, '=', substr(name, 2)) into :rename_list separated by ' ' from dictionary.columns where libname='WORK' and memname='SMRY_' and name like '_%'; quit; /*执行重命名*/ proc datasets lib=work nolist; modify smry_; rename &rename_list.; quit;
这段代码会自动找出smry_中所有以下划线开头的变量,去掉变量名的第一个下划线,批量完成重命名,全程不会改动数据集的观测行数。
内容的提问来源于stack exchange,提问作者saslearner
相关产品推荐
相关产品推荐

