楼主: the_fly_winds
1679 5

sas改编几行代码为宏代码 [推广有奖]

  • 0关注
  • 1粉丝

已卖:168份资源

博士生

8%

还不是VIP/贵宾

-

威望
0
论坛币
1139 个
通用积分
4.9700
学术水平
16 点
热心指数
24 点
信用等级
14 点
经验
2333 点
帖子
106
精华
0
在线时间
264 小时
注册时间
2014-9-28
最后登录
2025-6-4

楼主
the_fly_winds 发表于 2016-10-23 14:53:05 |AI写论文
40论坛币
数据很简单!变量code,数据1  2  3   4   5  。。。 15;
将下列程序中所有以数字进行判断的均改成以宏的输入变量n进行判断。

  1. %macro t;
  2. %do i = 1 %to 5;
  3. h(&i.)=lag&i.(code);
  4. %end;
  5. %mend;

  6. data b;
  7. set a;
  8. array h(5);
  9. %t;
  10. m=sum(of h(*))/6;
  11. run;

  12. data c;
  13. set b;
  14. if _n_ <6 then m = .;
  15. run;
复制代码


把上述语句改为一个宏, 要求输入一个数调用宏完成所有计算.

例如, 在 do i=1 to 5语句中, 5 应该改成n-1,  数字6应该是n.

很简单, 就是改成宏, 用n调用.

谢谢! MUA!


关键词:array Macro code Data COD 程序

沙发
wang1839 在职认证  发表于 2016-10-23 14:53:06
  1. data a;
  2. do i=1 to 15;
  3. code=0.1*i;
  4. output;
  5. end;
  6. drop i;
  7. run;


  8. %macro output(n=);
  9. data b;
  10. set a;
  11. array h(%eval(&n-1));
  12. %do i = 1 %to (&n-1);
  13. h(&i.)=lag&i.(code);
  14. %end;
  15. if _n_ <&n then m = .;
  16. else m=sum(of h(*))/&n;
  17. run;
  18. %mend;

  19. %output(n=6);
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
the_fly_winds + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

A man who is frustrated will never stand up.

藤椅
wang1839 在职认证  发表于 2016-10-23 15:20:26
data a;
do i=1 to 15;
code=0.1*15;
output;
end;
drop i;
run;


%macro output(n=);
data b;
set a;
array h(5);
%do i = (&n-5) %to (&n-1);
h(&i.)=lag&i.(code);
%end;
if _n_ <6 then m = .;
else m=sum(of h(*))/6;
run;
%mend;

%output(n=6);

板凳
the_fly_winds 发表于 2016-10-23 19:33:26
wang1839 发表于 2016-10-23 15:20
data a;
do i=1 to 15;
code=0.1*15;
大神,程序仍然无法运行..要把所有的数字都改成n.的代数式1就不用改了, 1是起点.

报纸
the_fly_winds 发表于 2016-10-23 19:47:10
wang1839 发表于 2016-10-23 15:20
data a;
do i=1 to 15;
code=0.1*15;
我把代码改成这样, 用一个n调动宏才是我想要的.
可是无法运行, 大神你看看
  1. data a;
  2. do i=1 to 15;
  3. code=0.1*15;
  4. output;
  5. end;
  6. drop i;
  7. run;


  8. %macro output(n=);
  9. data b;
  10. set a;
  11. array h(&n-1);
  12. %do i = 1 %to (&n-1);
  13. h(&i.)=lag&i.(code);
  14. %end;
  15. if _n_ <&n then m = .;
  16. else m=sum(of h(*))/&n;
  17. run;
  18. %mend;

  19. %output(n=6)
复制代码

地板
the_fly_winds 发表于 2016-10-24 21:24:57
wang1839 发表于 2016-10-23 14:53
谢谢!~~~~~~~~

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

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