楼主: caibirdcnb
1880 2

[问答] 请问高手我的程序错在哪里?为什么symget解析的结果不对? [推广有奖]

  • 0关注
  • 37粉丝

讲师

47%

还不是VIP/贵宾

-

威望
0
论坛币
1367 个
通用积分
16.5538
学术水平
67 点
热心指数
70 点
信用等级
64 点
经验
6762 点
帖子
206
精华
2
在线时间
433 小时
注册时间
2011-8-31
最后登录
2023-9-23

楼主
caibirdcnb 发表于 2017-11-11 12:49:23 |AI写论文
5论坛币
下面程序运行结果:JUDGE1=1是正确的,JUDGE2=0不是想要的,期望得到JUDGE2=1

谢谢!

  1. data in;
  2. X1=1;
  3. X2=1;
  4. X3=.;
  5. X4=1;
  6. run;

  7. %macro diff(vars=X1 X2 X3 X4);
  8. %let vars=%sysfunc(compbl(&vars));
  9. %let count=%sysfunc(countw(&vars,' '));

  10. /*        定义宏变量【str】的值是【X1=X2=X4】*/
  11. %let str=X1=X2=X4;

  12. data out;
  13. set in;

  14. length _CONN $100.;
  15. _CONN='';
  16. %do i=1 %to &count;
  17. if missing(%scan(&vars,&i))=0 then _CONN=catx('=',_CONN,"%scan(&vars,&i)");
  18. %end;
  19. /*        定义宏变量【conn】的值是【X1=X2=X4】*/
  20. call symputx('conn'||compress(_N_),_CONN);

  21. if (&str) then JUDGE1=1;
  22. else JUDGE1=0;

  23. if (symget('conn'||compress(_N_))) then JUDGE2=1;
  24. else JUDGE2=0;

  25. run;
  26. %mend;
  27. %diff;
复制代码

关键词:Get compress sysfunc missing countw

沙发
怪雨盲风410 发表于 2018-1-6 21:15:39
问题出在这里
if (symget('conn'||compress(_N_))) then JUDGE2=1;
在执行阶段SAS看到的是  if "X1=X2=X4" then JUDGE2=1;
symget函数最好别嵌套在if里作整体条件判别使用。

藤椅
caibirdcnb 发表于 2018-4-7 21:51:40
感谢楼上!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-9 03:28