楼主: manchengfu
1889 4

[有偿编程] 宏中调用自动变量 [推广有奖]

  • 0关注
  • 0粉丝

已卖:23份资源

本科生

50%

还不是VIP/贵宾

-

威望
0
论坛币
499 个
通用积分
1.9300
学术水平
3 点
热心指数
3 点
信用等级
3 点
经验
3090 点
帖子
84
精华
0
在线时间
83 小时
注册时间
2005-8-29
最后登录
2022-11-14
毕业学校
山西财经大学

楼主
manchengfu 发表于 2016-12-24 12:01:05 |AI写论文
10论坛币
自己试着写一个宏来计算Pearson相关系数。在把变量累计值赋值给新的宏变量时出错,不能执行。感觉是调用自动变量_n_或者观测数n时出了问题。请帮忙查看下该如何调整?谢谢!
  1. %macro Pearson(DSin,XVarlist,DSout);

  2. %let countX=%eval(%sysfunc(count(&XVarlist,%str( )))+1);
  3. %do i=1 %to &countX;
  4.         %let x&i=%scan(&XVarlist,&i,%str( ));
  5. %end;

  6. data temp;
  7. /*计算累加值*/
  8. set &DSin nobs=n;
  9. %DO i=1 %to &countX;
  10. %let xs&i=%sysfunc(cats(&&x&i,_s));
  11. retain &&xs&i 0;
  12. &&xs&i+&&x&i;
  13. %if _n_=n %then %do;
  14. call symput("xss_"||left(i),left(&&xs&i));
  15. %end;
  16. %end;
  17. run;

  18. data temp_2;
  19. /*计算均值*/
  20. set temp nobs=n;
  21. %DO i=1 %to &countX;
  22. %let xm&i=%sysfunc(cats(&&x&i,_m));
  23. &&xm&i=&&xss_&i/n;
  24. %end;
  25. run;

  26. %mend;
复制代码


关键词:varlist sysfunc pearson RETAIN symput 自动变量

沙发
learsaas 发表于 2016-12-24 12:01:06
  1.         if _n_=n then do;
  2.           call symput("xss_"||"%left(&i)",left(&&xs&i));
  3.         end;
复制代码

藤椅
孤单的我们 发表于 2016-12-26 13:19:02
%if _N_=n %then ……
执行顺序并非LZ想象的这样,%if的执行在data step之前,而_N_和n是data step产生的

板凳
manchengfu 发表于 2016-12-26 13:53:42
孤单的我们 发表于 2016-12-26 13:19
%if _N_=n %then ……
执行顺序并非LZ想象的这样,%if的执行在data step之前,而_N_和n是data step产生的
请教可以如何调整?

报纸
manchengfu 发表于 2016-12-29 12:21:30
learsaas 发表于 2016-12-24 12:01
  1. if _n_=n then do;
  2.   call symput("xss_"||"%left(&i)",left(&&xs&i));
  3. end;
复制代码
多谢。
能否解释一下有%和没有的区别?一直很困惑。
另外i前面为什么要加&?

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

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