SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 2116|回复: 6
打印 上一主题 下一主题

SAS中可以创建宏变量数组吗?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-8-7 14:16:52 | 只看该作者

SAS中可以创建宏变量数组吗?

举例来说,我有200个观测值,想把他们赋值到200个宏变量,用call symput();
SAS中可以创建宏变量数组吗?或者有没有其他更好的方法来实现?

多谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-8-7 14:44:41 | 只看该作者

Re: SAS中可以创建宏变量数组吗?

能问问你想拿那200个宏变量干什么用吗?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-8-10 11:58:54 | 只看该作者

Re: SAS中可以创建宏变量数组吗?

本想写一个可以做rename的macro,数据集太大,变量太多,so....................................................
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-8-10 13:03:58 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2009-8-10 13:09:01 | 只看该作者

Re: SAS中可以创建宏变量数组吗?

以前有个"批量重命名"的帖子...
将这200个东西赋值给dx1-dx200 再用循环引用 &&dx&i..
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2009-8-12 13:17:14 | 只看该作者

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;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2009-8-13 08:57:49 | 只看该作者

Re: SAS中可以创建宏变量数组吗?

谢谢楼上各位,受用了 :)
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 23:09 , Processed in 0.134914 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表