楼主: kezhengs
2855 4

[学习分享] 各位GGJJ,如何使用sas宏计算多组参数呢~ [推广有奖]

  • 2关注
  • 1粉丝

初中生

9%

还不是VIP/贵宾

-

威望
0
论坛币
8 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
72 点
帖子
10
精华
0
在线时间
13 小时
注册时间
2010-6-16
最后登录
2016-6-2

楼主
kezhengs 发表于 2012-3-22 17:00:24 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
各位GGJJ,小妹有个地方不懂诶。小妹用sas编了个宏程序,想做点参数运算的。但是数据量太大,做起来比较麻烦。目前我是把一组参数输入之后运行一遍后再计算另一组参数,再运行一遍。各位GGJJ有什么办法可以一次性把参数全部输入,然后得出所有的结果呢?谢谢指点哦,感激不尽呢~~^_^
我的程序大概是:

%macro a(a,b,c,sigma,d,mu);

data paper;

xx;

xx;

put a= b= c= sigma= d= mu= v1= v2=;

%mend a;

%a(20,15,0.02,0.1,0.5,0.1);

run;

   
二维码

扫码加我 拉你入群

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

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

关键词:GGJJ SAS宏 如何使用 Sigma Macro sigma 计算 如何 程序

沙发
kezhengs 发表于 2012-3-22 19:51:02
自己顶一下~嗯~

藤椅
可~乐 发表于 2012-3-25 00:42:26
把这些参数输入到一个数据集中,然后通过循环一条一条记录的把参数传给宏调用就可以了。。。

板凳
可~乐 发表于 2012-3-26 00:22:08
你可以参照这个例子试试
  1. data a;
  2. input group $ number point;
  3. cards;
  4. A 1 85
  5. A 2 66
  6. B 1 69
  7. C 3 55
  8. D 4 33
  9. ;
  10. run;

  11. %macro macro_name(group,number,point);
  12. data out_&group.;
  13. group="&group";
  14. number=&number.;
  15. point=&point.;
  16. run;
  17. %mend;

  18. %macro test;
  19. *打开存放参数的数据集;
  20. %let dsid=%sysfunc(open(work.a,i));
  21. %put &dsid;        *%put是在日志输出改宏变量的值;
  22. *fetch是为了判断是否读取完数据集记录,若已读完,则返回-1,否则返回0,赋给宏变量rc;
  23. %let rc=%sysfunc(fetch(&dsid));
  24.         %do %while(&rc=0);
  25.             *trim是去掉字符右边的空格,left是去掉字符左边的空格,getvarc(&dsid,1)是读取数据集的第一列,
  26.                 读取第二列则为getvarc(&dsid,2),getvarc是针对字符,若该列是数值型的则为getvarn(&dsid,2);
  27.                 %let group=%sysfunc(trim(%sysfunc(left(%sysfunc(getvarc(&dsid,1))))));
  28.                 %let number=%sysfunc(trim(%sysfunc(left(%sysfunc(getvarn(&dsid,2))))));
  29.                 %let point=%sysfunc(trim(%sysfunc(left(%sysfunc(getvarn(&dsid,3))))));
  30.                 %put &group;     %put &number;     %put &point;

  31.                 %macro_name(&group,&number,&point);*将参数传给调用你所需要运行的宏macro_name;

  32.                 %let rc=%sysfunc(fetch(&dsid));        *同上fetch;
  33.                 %put &rc;
  34.         %end;
  35.                 %let rc=%sysfunc(close(&dsid));        *关闭数据集;
  36.                 %put &rc;
  37. %mend;

  38. %test;
复制代码

报纸
kezhengs 发表于 2012-4-21 22:43:17
可~乐 发表于 2012-3-26 00:22
你可以参照这个例子试试
太牛了,谢谢啦

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

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