全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1733 0
2018-09-29
我是想写一个用来做datacleaning的宏,清理掉input dataset中每行值都为空的变量。以下code的目的是想要得到一个宏变量&droplist,包含所有要被drop掉的变量的名字。

附上我code的关键部分:


%macro datacleaning;

/*&droplist想要包含所有需要drop掉的变量的名字,最终想要达成类似于“name visit age gender”这样的呈现结果,初始设置为空*/
%let droplist=;

proc sql;
  select count(*) into: _n from varlist;
  select variable into: _varlist separated by " " from varlist;
quit;

%macro a;
  %do i=1 %to &_n;
      %let _variable=%scan(&_varlist,&i," ");

      ods trace on;
      ods output OneWayFreqs=freq;
      proc freq data=&dsn.;
         tables &_variable;
      run;
      ods trace off;

      proc sql;
        select sum(frequency) into: sum from freq;
      quit;

      %if &sum eq . %then %do;  /*"&sum eq ." means that in this variable all values are missing*/
         %let droplist=&droplist &_variable; /*if all values of the variable are missing, add this variable name into &droplist*/
      %end;
  %end;


%mend;
%a;

%mend;
%datacleaning;


只要不加开头的“%macro datacleaning;”及结尾的“%mend;%datacleaning;”,我就能顺利的得到想要的&droplist,但是一旦外面再套一层宏就不行了,百思不得其解,是局部宏变量和全局宏变量的问题?还是ods output数据集的功能在宏中受限?


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群