全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1790 6
2011-07-14
该宏是用来比较任意两个数据集变量是否相等,dsn1表示基数据集,dsn2表示测试数据集,我想问问各位好朋友们,宏当中如何提前结束子循环(如红色部分所示),本人用until,但是显示是错误的,我们知道DATA步中用leave就可以提前结束,那宏中呢?谢谢了


%macro sssss(dsn1,dsn2);
proc sql noprint;
select name into :namelist separated by ' '
from dictionary.columns
where libname='WORK' and memname=upcase("&dsn1");
%let dim1=&sqlobs;
select name into :namelist2 separated by ' '
from dictionary.columns
where libname='WORK' and memname=upcase("&dsn2");
%let dim2=&sqlobs;
quit;
%put namelist=&namelist  namelist2=&namelist2 &dim1 &dim2;
%do i=1 %to &dim2;
%let count=0;
%let word2=%scan(&namelist2,&i);
    %do j=1 %to &dim1 %until(&count=1);;
%let word1=%scan(&namelist,&j);
    %if &word2=&word1   %then %do;
    %put variable &word2 is  in &dsn1;
%let count=%eval(&count+1);
%end;
%end;
%if &count=0  %then %put variable &word2 is not in &dsn1;
%end;
%mend sssss;
二维码

扫码加我 拉你入群

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

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

全部回复
2011-7-14 22:07:08
j=1 %to &dim1 去掉试试
二维码

扫码加我 拉你入群

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

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

2011-7-14 22:23:35
2# honghejing
去掉之后,我后面的scan函数就用不了了哦...
二维码

扫码加我 拉你入群

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

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

2011-7-15 07:22:37
试试这个:

%do j=1 %to &dim1;
      %let word1=%scan(&namelist,&j);
      %if &word2=&word1   %then %do;
                        %put variable &word2 is  in &dsn1;
                         %let count=%eval(&count+1);
                         %let j=%eval(&dim1+1);
       %end;
%end;
二维码

扫码加我 拉你入群

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

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

2011-7-15 08:56:26
%let j=1;
  %do %until(&count=1 or &j=&dim1);;
%let &j=%eval(&j)+1;
%let word1=%scan(&namelist,&j);
    %if &word2=&word1   %then %do;
    %put variable &word2 is  in &dsn1;
%let count=%eval(&count+1);
%end;
二维码

扫码加我 拉你入群

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

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

2011-7-15 09:28:42
4# pobel
没想到....嘻嘻...还是您厉害...
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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