楼主: ywb0314
8225 17

[原创博文] 数据步中的多个观测同一个变量循环赋给宏值 [推广有奖]

  • 8关注
  • 3粉丝

讲师

32%

还不是VIP/贵宾

-

威望
0
论坛币
1244 个
通用积分
12.3563
学术水平
3 点
热心指数
2 点
信用等级
2 点
经验
57175 点
帖子
542
精华
0
在线时间
438 小时
注册时间
2010-2-8
最后登录
2019-4-16

楼主
ywb0314 发表于 2011-11-21 16:01:33 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
现有一个数据集,data步读入时如何让其中的变量付给宏,每个观测赋一次。
例如:%macro ceshi(a,b);
%let c=&a+&b;
%put &c;
run;
%mend;
data data6;
set sashelp.buy;
%ceshi(date,amount);
run;
此程序有误,如何能让数据集中的每个观测都读到宏变量中,希望有高手帮一下,宏的运行次数为观测的个数。
二维码

扫码加我 拉你入群

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

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

关键词:SASHELP amount ceshi data步 Macro amount 程序 如何

回帖推荐

tj0412ymy 发表于7楼  查看完整内容

You must specifie a temporary variable whose numeric value determines which observation is read.Because the rule for this statement is POINT=variable.

本帖被以下文库推荐

沙发
tj0412ymy 发表于 2011-11-21 17:54:00
  1. %macro ceshi(a,b);
  2. %let c=%eval(&a.+&b.);
  3. %put &c;
  4. %mend;

  5. proc sql noprint;
  6. select count(*) INTO : obs from sashelp.buy;
  7. %let obs=%cmpres(&obs.);
  8. quit;

  9. %macro test();
  10. %do i=1 %to &obs.;
  11. data data6;
  12. set sashelp.buy(firstobs=&i. obs=&i.);
  13. output;
  14. run;

  15. data _NULL_;
  16. set data6;
  17. call symput('v1',compress(put(date,best12.)));
  18. call symput('v2',compress(put(amount,best12.)));
  19. run;
  20. %ceshi(&v1.,&v2.);
  21. %end;
  22. %mend;
  23. %test;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
ywb0314 + 1 + 1 + 1 积极帮助他人

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

对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

藤椅
ywb0314 发表于 2011-11-23 09:01:55
tj0412ymy 发表于 2011-11-21 17:54
多谢指导,还有没有更好的方法,这个运行起来有点慢,你对函数功能了解吗

板凳
tj0412ymy 发表于 2011-11-23 15:41:00
ywb0314 发表于 2011-11-23 09:01
多谢指导,还有没有更好的方法,这个运行起来有点慢,你对函数功能了解吗
This code may be more efficient without creating no datasets because there are too many I/Os in above code. FYI.
  1. %macro ceshi(a,b);
  2. %let c=%eval(&a.+&b.);
  3. %put &c;
  4. %mend;
  5. %macro test();
  6. data _NULL_;
  7. set sashelp.buy nobs=obs;
  8. call symput('obs',put(obs,best12.));
  9. run;
  10. %do i=1 %to &obs.;
  11. data _NULL_;
  12. pt=&i.;
  13. set sashelp.buy point=pt;
  14. output;
  15. call symput('v1',compress(put(date,best12.)));
  16. call symput('v2',compress(put(amount,best12.)));
  17. stop;
  18. run;
  19. %ceshi(&v1.,&v2.);
  20. %end;
  21. %mend;
  22. %test;
复制代码
对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

报纸
ywb0314 发表于 2011-11-24 09:59:02
tj0412ymy 发表于 2011-11-23 15:41
This code may be more efficient without creating no datasets because there are too many I/Os in ab ...
程序比原来快多了,为什么应定要引入pt,尝试过直接用宏变量不行?

地板
soporaeternus 发表于 2011-11-24 10:06:54
这样的&c不就是最后一个&c
Let them be hard, but never unjust

7
tj0412ymy 发表于 2011-11-24 10:17:42
ywb0314 发表于 2011-11-24 09:59
程序比原来快多了,为什么应定要引入pt,尝试过直接用宏变量不行?
You must specifie a temporary variable whose numeric value determines which observation is read.Because the rule for this statement is POINT=variable.
对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

8
ywb0314 发表于 2011-11-24 11:27:37
soporaeternus 发表于 2011-11-24 10:06
这样的&c不就是最后一个&c
是&i不是你说的那个。

9
soporaeternus 发表于 2011-11-24 12:39:52
如果要一系列macro分别对应每行的值的话
1给macro们一个序列名称
2一个data步足矣,不用不断循环
Let them be hard, but never unjust

10
ywb0314 发表于 2011-11-28 09:34:18
soporaeternus 发表于 2011-11-24 12:39
如果要一系列macro分别对应每行的值的话
1给macro们一个序列名称
2一个data步足矣,不用不断循
interest2 data2 原问题是这个在test.data2中,item1表示流动资产。请计算出数据中每一家分行流动   资产应获得的利息总额。请注意,利息分天支付,天利率记载在test.interest2中,最后结果请保存到数据中.希望高手帮助一下小弟,intertest2中的数据已完全截图,而data2中原来有1000多条观测。

interest2.jpg (12.77 KB)

interest2.jpg

data2.jpg (48.94 KB)

data2.jpg

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

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