SAS中如何提取数据集中的同一类型变量?

今天出一张Table,出BigN时只纳入所有分析变量不为空的受试者进入分析。这个操作不复杂,笨拙一点的方法是对每个分析变量依次进行not missing()判断,可是这个分析变量足足有20个,想到要手动输出20个变量名并要使用AND连接合并成一个判断语句,我就直接排除这个方法了。

接下来的思路就是计数空值变量,只保留计数为0的记录。计数变量空值的函数是CMISSNMISS,这里我思考的时候想错了。我原本以为CMISS只能计数字符型变量,而实际上CMISS 函数可以同时计数字符型和数值型的变量,NMISS只能计数数值型变量。借由上面那个“误区”,就要考虑一个问题——如何提取数据集中的同一类型的变量?

不管是在数据集中保留同一类型的变量,还是对同一类型变量集中操作,首先是要将同一类型变量的名称提取出来。这里需要用到SAS字典中的Columns数据集,这个数据集保存了SAS系统中各个逻辑库中的各个数据集的变量信息,调用SAS字典需要使用Proc SQL进行调用,先来看一下Columns数据集中的内容,以SASHELP逻辑库中的Class举例:

proc sql noprint;
  create table test as
    select *
    from dictionary.columns
    where libname="SASHELP" and memname="CLASS";
quit;
Test

SAS系统中的所有数据集中的变量信息都可以通过以上方式获取,可以根据工作的需要自行对这些信息进行整合。比如,我想使用CMISS函数计数某个数据集记录中各变量的缺失情况,这时候需要把这些变量拼接在一起并使用,间隔,并把结果保存到宏变量中,方便使用。

proc sql noprint;
  select name into: varname separated by "," 
    from dictionary.columns
    where libname="SASHELP" and memname="CLASS";
quit;

%put &varname;

data test;
  set sashelp.class;
  if cmiss(&varname) >0 then delete;
run;

宏变量的内容如下:


&varname.

如果想要保存数据集中的特定类型的变量,我们可以在Proc SQL中筛选时添加条件type="char"或者type="num",为方便使用KEEP语句,拼接变量名时,可以使用空格作为间隔,具体代码就不再演示了。

若有疑问,欢迎评论区交流!

你可能感兴趣的:(SAS中如何提取数据集中的同一类型变量?)