全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3405 10
2018-04-19
复制代码
当前要清洗一批地址类数据----去掉所有的民族信息。
&n_nation.为民族码表的条数
&nation.为全部民族名称合并的字符串,以空格隔开
现在遇到的问题是%sysfunc(tranwrd(id_addr,&nt.,%str()))不能获取&nt.的值,代码跑完并不能实现删除相应关键字功能。


请问要怎么改才好,之前有通过将id_addr逐条赋为宏变量值,然后替换,代码可实现。
二维码

扫码加我 拉你入群

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

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

全部回复
2018-4-19 15:54:34
哥们,你混淆概念了。

宏里面的data步如果掺杂了宏变量/宏参数、宏函数(如%scan)、%sysfunc,是在这个data步执行之前先行编译的;
就说先要把你data步中的所有%和&要解析成“文本”,再接着执行整个data步。

所以你%sysfunc(tranwrd(id_addr,&nt.,%str())),这一步的意思是:把id_addr这几个字符中的民族内容替换,那当然无效了。
二维码

扫码加我 拉你入群

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

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

2018-4-19 16:02:40
Tigflanker 发表于 2018-4-19 15:54
哥们,你混淆概念了。

宏里面的data步如果掺杂了宏变量/宏参数、宏函数(如%scan)、%sysfunc,是在这个 ...
是不是说只能分步实现?
1.把id_addr赋为宏变量,但是鉴于宏变量长度要求,需要分批实现。
2.对宏变量&id_addr进行函数操作。
3.合并操作结果。
二维码

扫码加我 拉你入群

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

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

2018-4-19 16:12:24
复制代码
二维码

扫码加我 拉你入群

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

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

2018-4-19 16:19:19
复制代码
二维码

扫码加我 拉你入群

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

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

2018-4-19 16:31:11
luyoung 发表于 2018-4-19 16:02
是不是说只能分步实现?
1.把id_addr赋为宏变量,但是鉴于宏变量长度要求,需要分批实现。
2.对宏变量& ...
你有些过度用宏啦,一般如果你涉及到数据集层面的重复,建议用宏,另一个就是你的语句中出现%do,那也是必须用宏;
除此以外,data步也有三级循环的,PDV、array或prxchange、hash,已经挺灵活的;
你的id_addr是在数据集中,所以不用引出来哈。
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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