楼主: freetiger
5766 4

[有偿编程] 数组作为宏变量的调用 [推广有奖]

  • 0关注
  • 0粉丝

已卖:8份资源

博士生

34%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
4.5000
学术水平
1 点
热心指数
1 点
信用等级
0 点
经验
2507 点
帖子
100
精华
0
在线时间
371 小时
注册时间
2011-1-17
最后登录
2024-1-10

楼主
freetiger 发表于 2015-2-25 11:02:54 |AI写论文
20论坛币
  1. %macro testFunc(x1=,x2=,t=);
  2. %global myFunc&i;
  3. data dnull;
  4. f&i.=&x1**2+&x2**2;
  5. call symputx(cat('myFunc',&i),f&i.);
  6. run;
  7. %mend;

  8. data main;
  9. array x1_[3,5];
  10. array x2_[3,5];
  11. do j=1 to 5;
  12.         do i=1 to 3;
  13.                 x1_[i,j]=i+j;
  14.                 x2_[i,j]=i*2+j;
  15.         end;
  16. end;
  17. run;
复制代码
将x1=x1_[3,j],x2=x2_[3,j],t=j(j=1,2,3,4,5)调用testFunc,得到myFunc1-myFunc5
关键词:Global symput array lobal Macro

回帖推荐

yongyitian 发表于2楼  查看完整内容

沙发
yongyitian 发表于 2015-2-25 11:02:55
  1. %macro testFunc(x1=,x2=,i=);
  2. %global myFunc&i;
  3. data dnull;
  4. f&i.=&x1**2+&x2**2;
  5. call symputx(cat('myFunc',&i),f&i.);
  6. run;
  7. %mend;

  8. data main;
  9. array x1_[3,5];
  10. array x2_[3,5];
  11. do j=1 to 5;
  12.         do i=1 to 3;
  13.                 x1_[i,j]=i+j;
  14.                 x2_[i,j]=i*2+j;
  15.         end;
  16. end;

  17. do j = 1 to 5;
  18.     a1 = x1_[3,j];
  19.     a2 = x2_[3,j];
  20.     call execute('%testfunc(x1=' || a1 ||", " || 'X2=' || a2 || ", " || 'i=' || j || ')');
  21. end;
  22. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
freetiger + 1 + 1 + 1 精彩帖子

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

藤椅
freetiger 发表于 2015-2-25 14:10:17
感谢大神回复,能正常运行!
我再实际使用中还是没法熟练运用,被这几个符号困扰:',||,"
  1. %do n=1 %to &Num.;
  2.         %do i=1 %to &Xvar.;       
  3.                 xTmp=put(Xvar[&i,&n],best.);
  4.                 call symputx(cat('xTmp',&i),xTmp);               
  5.         %end;
  6.         call execute('....');
  7. %end;
复制代码

execute里的语句希望是:%testFunc(x1=xTmp1,....,x&Xvar.=xTmp&Xvar.,t=&n.)
总是拼不对。希望。。。

板凳
freetiger 发表于 2015-2-25 14:18:05
本该酬金奉上,怕出现”已解决“失去关注。

这里xTmp。。是对应数组的值

报纸
yongyitian 发表于 2015-2-26 08:40:52
freetiger 发表于 2015-2-25 14:10
感谢大神回复,能正常运行!
我再实际使用中还是没法熟练运用,被这几个符号困扰:',||,"
目的是生成一个字符串放在execute()中运行. 这个字符串是call execute()语句要运行的内容。

换句话说,这个字符串应该是一段可以单独运行的程序。

|| 是将前后两个字符串连接起来形成一个新的字符串.

a1, a2, j 是数据步的变量,因此连接时用的是变量的值。而其他的 x1, x2, 等号,逗号等在call execute() 语句中都做为字符处理。

cats()函数和 || 有同样的功能,而且比较易懂。
  1. data main;
  2. array x1_[3,5];
  3. array x2_[3,5];
  4. do j=1 to 5;
  5.         do i=1 to 3;
  6.                 x1_[i,j]=i+j;
  7.                 x2_[i,j]=i*2+j;
  8.         end;
  9. end;

  10. do j = 1 to 5;
  11.     a1 = x1_[3,j];
  12.     a2 = x2_[3,j];
  13.     text = cats('%testfunc( x1=',
  14.                               a1,
  15.                             ', ',
  16.                            'x2=',
  17.                               a2,
  18.                             ', ',
  19.                             'i=',
  20.                                j,
  21.                               ')' );
  22.     put j=  a1=  a2=  text=;
  23.     call execute(text);
  24. *    call execute('%testfunc(x1=' || a1 ||", " || 'X2=' || a2 || ", " || 'i=' || j || ')');
  25. end;
  26. run;
复制代码
更详细的, 可以参考 https://bbs.pinggu.org/thread-2377205-1-1.html
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
freetiger + 1 + 1 + 1 精彩帖子

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

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

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