楼主: 小鳄鱼a
5149 3

如何把宏变量生成在一个数据集中变量的观测 [推广有奖]

  • 6关注
  • 10粉丝

已卖:280份资源

学科带头人

3%

还不是VIP/贵宾

-

威望
0
论坛币
125 个
通用积分
0.0040
学术水平
40 点
热心指数
45 点
信用等级
43 点
经验
32801 点
帖子
1185
精华
0
在线时间
1539 小时
注册时间
2009-7-16
最后登录
2018-10-5

楼主
小鳄鱼a 发表于 2014-10-30 11:27:32 |AI写论文
30论坛币
每一次宏循环,宏变量x都产生一个值
现在想把每一步的宏变量x值放在一个数据集a中,生成一个变量x,每一次循环产生的x值作为一个观测。并把循环标识i一起,作为另外一个变量
请问怎么个思路

最佳答案

Tigflanker 查看完整内容

建议你下次求助能给个无论大小的前提,例如这个宏变量是x1,x2的形式啊,或是就只叫做一个x用append可以免去新建base数据集的麻烦;但是小心如果本身all就存在,他会把all直接拿来用。 也可以用SQL的insert来插值。
关键词:变量生成 数据集 宏循环 如何

沙发
Tigflanker 发表于 2014-10-30 11:27:33
  1. %macro test;
  2.   %do i = 1 %to 5;
  3.     %let x&i. = %scan(1 q 2 w 3,&i.);

  4.         data collect;
  5.           length x $20.;
  6. %if &i. > 1 %then %do;
  7.           set collect end = last;
  8.           output;

  9.           if last then do;
  10. %end;
  11.         x = "&&x&i..";
  12.         i = &i.;
  13.         output;

  14. %sysfunc(ifc(&i. > 1,end;,))
  15.         run;
  16.   %end;
  17. %mend;
  18. %test;
复制代码
建议你下次求助能给个无论大小的前提,例如这个宏变量是x1,x2的形式啊,或是就只叫做一个x
  1. Or:
  2. %macro test;
  3.   %do i = 1 %to 5;
  4.     %let x&i. = %scan(1 q 2 w 3,&i.);

  5.         data collect;
  6.           length x $20.;

  7.           x = "&&x&i..";
  8.           i = &i.;
  9.         run;

  10.         proc append base = all data = collect;
  11.         quit;
  12.   %end;
  13. %mend;
  14. %test;
复制代码
用append可以免去新建base数据集的麻烦;但是小心如果本身all就存在,他会把all直接拿来用。
也可以用SQL的insert来插值。
Bye SAS.
若有缘,能重聚。

藤椅
小鳄鱼a 发表于 2014-10-30 21:45:23
Tigflanker 发表于 2014-10-30 11:27
建议你下次求助能给个无论大小的前提,例如这个宏变量是x1,x2的形式啊,或是就只叫做一个x用append可以免去 ...
如果x是数字的呢

板凳
Tigflanker 发表于 2014-10-31 09:38:15
小鳄鱼a 发表于 2014-10-30 21:45
如果x是数字的呢
是一样的。

在一个data步过程中,编译器会先将data步内的宏变量和宏语句先行解析,将解析后的结果直接当做正常文本替换。

例如:

%let a = 1;

data ...

  value = &a.;
Same as:
  value = 1;

and

  value = "&a.";
Same as:
  value = "1";

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 22:37