全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5912 4
2018-06-05
对于call symput不太理解,

目前遇到个读档案的问题
来源档 Name_Row
Id  n   Name_Row
1  3    Jack|Albert|Rice
2  2    Geroge|Rodman

想梳理成 Name_List
ID Name
1  Jack
1  Albert
1  Rice
2  George
2  Rodman
------------------------
Data Name_List;
Set Name_Row;
Retain ID N Name_Row;
Call Symputx("n",n);
    %do i=1 %to &n.;
    Name_List=scan(Name_Row,&i.,"|");
    output;
    %end;
run;
---------------------------
Call Symputx("n",n);  似乎没成功,请问该如何调整呢?
二维码

扫码加我 拉你入群

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

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

全部回复
2018-6-6 09:00:02
Data Name_List;
Set Name_Row;
Retain ID N Name_Row;
    do i=1 to n;
    Name_List=scan(Name_Row,i,"|");
    output;
    end;
keep id name_list;
run;
二维码

扫码加我 拉你入群

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

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

2018-6-6 10:50:28
call symput生成宏变量在data步结束后生效
二维码

扫码加我 拉你入群

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

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

2018-8-7 23:28:25
复制代码

**********************
call Symputx("N",'N');加单引号
二维码

扫码加我 拉你入群

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

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

2018-8-17 10:32:47
首先,call symput() 是用单引号来添加宏。其次,call symput发生在数据执行阶段,而你的调用却是在:
  %do i=1 %to &n.;
    Name_List=scan(Name_Row,&i.,"|");
    output;
    %end;
这个阶段。这个阶段通过MACRO Processor编译的时间,是在data step之前,那个时候call symput还没有执行,你肯定会得到一个&n没有被resolve出来的提示。
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群