全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2437 6
2012-05-13
大神们:
不知道SAS有没语句可以判断已执行的语句;
例如A段:Data a;set xxx;run;B段:Data b;set xxx;run;C段:Data c;set xxx;run;你有三段DATA步程序或者宏,
【如果Data a;set xxx;run;已执行,那么C段不执行;
如果B:Data b;set xxx;run;已执行,那么C段不执行;
如果A段和B段未执行,那么执行C段;】

大神们,SAS有语句可以实现这类型的操作么?
二维码

扫码加我 拉你入群

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

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

全部回复
2012-5-13 18:07:15
是不是可以这样?假如A或者B数据集都不存在,那么才执行C?
data a;
......

data b;
.....

%macro test;
   %if %sysfunc(exist(A))=0 and %sysfunc(exist(B))=0 %then %do;
         data C;
             set xxxxxx;
            .......
         run;
    %end;
%mend;

%test;

另外可能还要判断虽然A或者B存在但是里面的观测数为0的情况。
二维码

扫码加我 拉你入群

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

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

2012-5-13 19:34:10
sinksought 发表于 2012-5-13 18:07
是不是可以这样?假如A或者B数据集都不存在,那么才执行C?
data a;
......
我用你的方式尝试过,会报错;
%macro test;
   %if %sysfunc(exist(A))=0 or %sysfunc(exist(B))=0 %then %do;
data work.a;
        input name $ y$;
        datalines;
a 1
b 2
c 3
d 4
e 5
;
Run;
%end;
%mend;
%test;
ERROR:宏TEST生成了DATA步的CARDS(数据行),可能导致不正确的结果。DATA 步和宏将停止执行。
ERROR: 宏 TEST 将终止执行。
二维码

扫码加我 拉你入群

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

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

2012-5-13 19:44:25
大神:
  我还想提个问题,如果%sysfunc(exist(A))函数能正确使用,那岂不是我在每次运行程序过后,必须关掉SAS重新打开使用这段程序?
二维码

扫码加我 拉你入群

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

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

2012-5-13 22:07:28
眼睛花 发表于 2012-5-13 19:34
我用你的方式尝试过,会报错;
%macro test;
   %if %sysfunc(exist(A))=0 or %sysfunc(exist(B))=0 %t ...
我的第二行 是 and 不是 or。第三行,我是data c 不是data a。 意思是数据集A和B都不存在时,才创建数据集C。和你的code的逻辑稍微不一样。
假如A被创建而B没有创建,你的%if 语句是判断为真的。会执行下面的创建work.a。而A已经存在了,可能这就是报error的原因。
二维码

扫码加我 拉你入群

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

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

2012-5-14 19:50:00
sinksought 发表于 2012-5-13 22:07
我的第二行 是 and 不是 or。第三行,我是data c 不是data a。 意思是数据集A和B都不存在时,才创建数据集 ...
谢谢啊,因为着急写出代码,将逻辑改了。而且还没改对。是我糊涂了,A OR B存在,这个逻辑本来就想错了。程序已测,可用,非常感谢。
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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