楼主: 郑小知
1472 8

[原创博文] 求助高手:宏的一些疑惑 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

27%

还不是VIP/贵宾

-

威望
0
论坛币
30 个
通用积分
0
学术水平
1 点
热心指数
2 点
信用等级
1 点
经验
487 点
帖子
133
精华
0
在线时间
92 小时
注册时间
2007-5-19
最后登录
2021-5-2

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
现想做一个宏,然后对宏中的参数实现一个特定序列的循环.请问能否实现?
就是类似%macro 宏名 (&1,&2,....)对&1的参数实现循环.
如果不行的话,只能在宏内部进行循环,那样就得修改程序.
现在问题就是宏外部能否实现我开始说的循环,还有就是宏中引用另外的宏能否实现,谢谢高手了.(感谢此问题已经由hopewell解决)
高手越活跃对我们这些菜鸟越好,我现在又有一个问题请教高手们,就是:
粗略描述如下:
%macro 宏名(m,lag(m))  /*m来自一个数据集的字符型变量,lag(m)也就是引用m的上一个滞后*/
这样通过循环使得这个宏依次取编整个数据集m的观测值.
请高手不吝赐教!
二维码

扫码加我 拉你入群

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

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

关键词:求助高手 hopewell Macro 字符型变量 请教高手 程序

回帖推荐

hopewell 发表于3楼  查看完整内容

本帖被以下文库推荐

沙发
数风代韵 发表于 2010-10-6 14:43:48 |只看作者 |坛友微信交流群
嗯,替你顶一下,等待高手!

使用道具

藤椅
hopewell 发表于 2010-10-6 15:06:20 |只看作者 |坛友微信交流群
  1. %macro a(arg1, arg2);
  2.     %do i=1 %to &arg1;
  3.         %b(&i, &arg2)
  4.     %end;
  5. %mend a;
  6. %macro b(arg1, arg2);
  7.     %put NOTE: *** %nrstr(%A)(&arg1, &arg2) executed ! ***;
  8. %mend b;
  9. %a(3,argument)
复制代码
已有 1 人评分论坛币 学术水平 热心指数 收起 理由
crackman + 20 + 1 + 1 精彩帖子

总评分: 论坛币 + 20  学术水平 + 1  热心指数 + 1   查看全部评分

使用道具

板凳
郑小知 发表于 2010-10-6 15:44:24 |只看作者 |坛友微信交流群
3# hopewell

非常感激高手的大力相助,真是厉害!思维非常严谨!让小弟茅塞顿开

使用道具

报纸
crackman 发表于 2010-10-6 16:54:03 |只看作者 |坛友微信交流群
HOPEWELL又开始活跃在论坛上了

使用道具

地板
crackman 发表于 2010-10-6 16:54:09 |只看作者 |坛友微信交流群
HOPEWELL又开始活跃在论坛上了

使用道具

7
郑小知 发表于 2010-10-6 17:48:51 |只看作者 |坛友微信交流群
顶!!!!!!!!!!!!!!!!!!

使用道具

8
hopewell 发表于 2010-10-6 19:04:29 |只看作者 |坛友微信交流群
  1. data raw;
  2.     input m @@;
  3. datalines;
  4. 1 2 3
  5. ;

  6. /*method 1*/
  7. %macro a(m, lag_m);
  8.     %put NOTE: *** %nrstr(%A)(&m, &lag_m) executed ! ***;
  9. %mend;
  10. data _null_;
  11.     set raw;
  12.     call execute(cats('%a(',m,',',lag(m),')'));
  13. run;

  14. /*method 2*/
  15. %macro a(m, lag_m);
  16.     %if &lag_m eq %then %let lag_m=.;
  17.     %put NOTE: *** %nrstr(%A)(&m, &lag_m) executed ! ***;
  18. %mend;
  19. %macro b(inds);
  20.     %let lag_m=;
  21.     %let dsid=%sysfunc(open(&inds,i));
  22.     %syscall set(dsid);
  23.     %do i=1 %to %sysfunc(attrn(&dsid,nlobs));
  24.         %let rc=%sysfunc(fetchobs(&dsid,&i));
  25.         %a(&m,&lag_m)
  26.         %let lag_m=&m;
  27.     %end;
  28.     %let rc=%sysfunc(close(&dsid));
  29. %mend;
  30. %b(work.raw)
复制代码

使用道具

9
郑小知 发表于 2010-10-7 22:07:39 |只看作者 |坛友微信交流群
8# hopewell
多谢hopewell的点拨,够我消化好几天了.

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-10 13:38