1056 4

[问答] 请帮忙看一下,每一段宏变量的输出值不是期望样子。 [推广有奖]

  • 0关注
  • 0粉丝

初中生

90%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
191 点
帖子
10
精华
0
在线时间
24 小时
注册时间
2020-12-17
最后登录
2023-4-24

楼主
经管用户2020 发表于 2020-12-17 10:16:36 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
代码:
%let code1=A1,B2,C3,D4;                                /*每次的分段数量在变化。*/
data _null_;
do i=1 by 1 while(scan("&code1.",i) ne '');
    aaa=scan("&code1.",i);
        call symput("code2",aaa);
        %put &code2;
        put aaa;
end;

run;

现在期望%put &code2;的输出与put aaa;的输出是一致的,即:
A1
B2
C3
D4
但是,现在第一次运行时输出:
    %let code1=A1,B2,C3,D4;             /*每次的分段数量在变化。*/
    data _null_;
    do i=1 by 1 while(scan("&code1.",i) ne '');
        aaa=scan("&code1.",i);
        call symput("code2",aaa);
        %put &code2;
WARNING: 没有解析符号引用 CODE2。
&code2
8        put aaa;
9    end;
10
11   run;

A1
B2
C3
D4

再一次运行时输出:
   %let code1=A1,B2,C3,D4;             /*每次的分段数量在变化。*/
   data _null_;
   do i=1 by 1 while(scan("&code1.",i) ne '');
       aaa=scan("&code1.",i);
       call symput("code2",aaa);
       %put &code2;
D4
       put aaa;
   end;

   run;

A1
B2
C3
D4
%put &code2;只看见最后一段的值D4了。请问大师们错误在哪里,该如何纠正?


二维码

扫码加我 拉你入群

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

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

关键词:warning symput while code scan

沙发
孤单的我们 发表于 2020-12-17 13:09:54
call symput("code2",aaa);尚未生成code2的时候就进行了解析,所以首次会报错,第二次运行code2是等于第一次的最后一次的。。

藤椅
经管用户2020 发表于 2020-12-17 14:39:27
孤单的我们 发表于 2020-12-17 13:09
call symput("code2",aaa);尚未生成code2的时候就进行了解析,所以首次会报错,第二次运行code2是等于第一 ...
感谢您的回答。请问应该如何才能实现期望的输出呢?

板凳
jg.sas 发表于 2020-12-18 14:16:18
直接宏级别的处理,%put %scan(&code1.,&n.)

报纸
经管用户2020 发表于 2020-12-22 09:57:27
jg.sas 发表于 2020-12-18 14:16
直接宏级别的处理,%put %scan(&code1.,&n.)
感谢您的回答。我去试试。

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

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