楼主: 苏白堤
1586 0

[技术讨论与投票] [求助]一段含有宏的code可以正常运行,但是外面再套一层宏就失败了? [推广有奖]

  • 0关注
  • 0粉丝

高中生

27%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
30 点
帖子
1
精华
0
在线时间
52 小时
注册时间
2017-9-24
最后登录
2020-5-29

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我是想写一个用来做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数据集的功能在宏中受限?


二维码

扫码加我 拉你入群

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

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

关键词:code ODE COD Frequency Variable macro

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-24 22:50