全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
6211 11
2016-03-02
在合并多个数据集时,会遇到同一个变量在不同数据集里数据类型不同的情况,需要修改为一致再合并。为此,写了一个宏程序,但是在执行时发现一个奇怪的问题。程序如下:
%macro attrib;
data _null_;set dsn nobs=obsnum;      * 数据集dsn包含需要修改变量属性的数据集的名字,                                                       * 这些数据集有共同的变量:obs,但是属性有的是字符型,有的是数值型;
call symput('total',left(obsnum));
run;
%put &total.;

%do i=&total. %to 1 %by -1;
     data _null_;set dsn;
     if _n_=&i. then call symput('dsn',strip(dsn));
     run;

     proc contents data=&dsn. out=var(keep=name type where=(lowcase(name)="obs")) noprint;run;
     data _null_;set Var;
     if lowcase(name)="obs" & type=2 then call symput('obs',left(type));
     run;
     %if %symexist(obs) %then %do;
                                     data &dsn.(rename=(trans_obs=obs));set &dsn.;
                                     trans_obs=obs/1;drop obs;run;
                                 %end;
     %symdel obs/nowarn;
%end;

proc delete data=dsn var;run;
%mend attrib;

%attrib;


程序中红色部分如果修改为:%do i=1 %to &total.;则执行结果不同。反复测试也没有发现问题所在,不知道有无高手遇到过类似问题,或者能指出这个程序问题所在?
不同数据集中该变量:obs属性不同,设定为均修改为数值型变量。


二维码

扫码加我 拉你入群

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

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

全部回复
2016-3-2 16:47:12
a数据集长什么样子?
二维码

扫码加我 拉你入群

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

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

2016-3-2 16:53:03
孤单的我们 发表于 2016-3-2 16:47
a数据集长什么样子?
data _null_;set dsn nobs=obsnum;

数据集dsn包含需要修改变量属性的数据集的名字,这些数据集有共同的变量:obs,但是属性有的是字符型,有的是数值型
二维码

扫码加我 拉你入群

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

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

2016-3-2 17:23:09
试了一下,可以运行啊

复制代码
二维码

扫码加我 拉你入群

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

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

2016-3-2 17:30:12
孤单的我们 发表于 2016-3-2 17:23
试了一下,可以运行啊
可以运行。只是运行时log中提示不同。红色语句不同,提示不一样。
一种提示obs未初始化,另外一种不提示。
我的是多个数据集,例如:a中该变量是字符型,b中是数值型,c中无该变量(对于c数据集的提示可能是:obs未初始化,或者是无任何异常提示,顺利运行)。感觉执行顺序不同,%if部分的编译结果不同,导致两种顺序的程序执行起来结果不同(提示不同)。我没有理解为何会这样?程序中特意删除了生成的宏变量:%symdel obs/nowarn;
二维码

扫码加我 拉你入群

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

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

2016-3-3 09:18:29
if lowcase(name)="obs" & type=2 then call symput('obs',left(type));
call symputx产生的宏变量,在循环语句结束时应当删去。
未初始化的原因是:c中无该变量时,宏变量obs保留上一次b的结果,%if %symexist(obs) %then %do;判断为真。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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