SAS中文论坛

标题: SAS中可以创建宏变量数组吗? [打印本页]

作者: shiyiming    时间: 2009-8-7 14:16
标题: SAS中可以创建宏变量数组吗?
举例来说,我有200个观测值,想把他们赋值到200个宏变量,用call symput();
SAS中可以创建宏变量数组吗?或者有没有其他更好的方法来实现?

多谢!
作者: shiyiming    时间: 2009-8-7 14:44
标题: Re: SAS中可以创建宏变量数组吗?
能问问你想拿那200个宏变量干什么用吗?
作者: shiyiming    时间: 2009-8-10 11:58
标题: Re: SAS中可以创建宏变量数组吗?
本想写一个可以做rename的macro,数据集太大,变量太多,so....................................................
作者: shiyiming    时间: 2009-8-10 13:03
标题: Re: SAS中可以创建宏变量数组吗?
[code:2dsmuks4]data original;
        input c d e a b;
datalines;
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
;

data name_list;
        input old_name $ new_name $;
datalines;
a name_4
b name_5
c var_1
d var_2
e var_3
;

%macro rename_var(orig_ds,var_ds);
        options nosymbolgen nomprint;
        data &orig_ds;
                set &orig_ds;
                %let id=%sysfunc(open(&var_ds));
                %let nobs=%sysfunc(attrn(&id,nobs));
                %syscall set(id);
                %do i=1 %to &nobs;
                        %let rc=%sysfunc(fetchobs(&id,&i));
                        rename &old_name=&new_name;
                %end;
                %let id=%sysfunc(close(&id));
        run;
%mend;

%rename_var(original,name_list)[/code:2dsmuks4]
作者: shiyiming    时间: 2009-8-10 13:09
标题: Re: SAS中可以创建宏变量数组吗?
以前有个"批量重命名"的帖子...
将这200个东西赋值给dx1-dx200 再用循环引用 &&dx&i..
作者: shiyiming    时间: 2009-8-12 13:17
标题: Re: SAS中可以创建宏变量数组吗?
把macro改成下面的可以跑的。
%macro rename_var(orig_ds,var_ds);
   options nosymbolgen nomprint;
   data _null_;
   set &var_ds;
   call symputx('oldname'||strip(put(_n_,best.)),old_name);
   call symputx('newname'||strip(put(_n_,best.)),new_name);  
  run;
   data &orig_ds;
      set &orig_ds;
      %let id=%sysfunc(open(&var_ds));
      %let nobs=%sysfunc(attrn(&id,nobs));
      %syscall set(id);
      %do i=1 %to &nobs;
         %let rc=%sysfunc(fetchobs(&id,&i));
         rename &&oldname&i=&&newname&i;
      %end;
      %let id=%sysfunc(close(&id));
   run;
%mend;
作者: shiyiming    时间: 2009-8-13 08:57
标题: Re: SAS中可以创建宏变量数组吗?
谢谢楼上各位,受用了 :)




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2