楼主: manchengfu
1902 7

[问答] 宏中批量生成新字段时数字部分无法解析 [推广有奖]

  • 0关注
  • 0粉丝

本科生

50%

还不是VIP/贵宾

-

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

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
写了一个宏。希望可以将一个用空格分开的字符串(例如“x1 x2 x6”)中的各个子字符串提取出来,并批量赋值给新变量。
结果运行的时候报错,说I 不能被解析。哪位帮忙看下什么地方出错了?

%macro test(varlist);

data test;
  x=&varlist;
  count1=count(x,' ');
  do i=1 to count1;
  x&i=scan(x,i,' ');
  output;
  i+1;
  end;
  run;

%mend;
%test('x1 x2 x6');

WARNING: 没有解析符号引用 I。




二维码

扫码加我 拉你入群

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

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

关键词:varlist warning output Count outpu 字符串 空格 循环读取

沙发
Strive、 发表于 2016-12-4 00:27:32 来自手机 |只看作者 |坛友微信交流群
manchengfu 发表于 2016-12-3 15:13
写了一个宏。希望可以将一个用空格分开的字符串(例如“x1 x2 x6”)中的各个子字符串提取出来,并批量赋值 ...
你的i不是宏变量,x&i中的i无法解析。
已有 1 人评分经验 收起 理由
李会超 + 100 精彩帖子

总评分: 经验 + 100   查看全部评分

使用道具

藤椅
manchengfu 发表于 2016-12-4 08:32:39 |只看作者 |坛友微信交流群
Strive、 发表于 2016-12-4 00:27
你的i不是宏变量,x&i中的i无法解析。
data步里不是可以不用定义的吗?

使用道具

板凳
Strive、 发表于 2016-12-4 08:46:43 |只看作者 |坛友微信交流群
你不定义,SAS如何知道i 是一个宏变量呢。
可以用如下定义。
%do i=1 %to count1;
  x&i=scan(x,i,' ');
  output;
  %end;
没跑过,你试试
已有 1 人评分经验 收起 理由
李会超 + 100 精彩帖子

总评分: 经验 + 100   查看全部评分

使用道具

报纸
manchengfu 发表于 2016-12-4 15:38:32 |只看作者 |坛友微信交流群
Strive、 发表于 2016-12-4 08:46
你不定义,SAS如何知道i 是一个宏变量呢。
可以用如下定义。
%do i=1 %to count1;
你这样一弄,count1不识别了

使用道具

地板
Strive、 发表于 2016-12-4 23:30:36 来自手机 |只看作者 |坛友微信交流群
manchengfu 发表于 2016-12-3 15:13
写了一个宏。希望可以将一个用空格分开的字符串(例如“x1 x2 x6”)中的各个子字符串提取出来,并批量赋值 ...
我试了下,估计是宏循环不能用普通变量的原因。   但是我把count1用宏变量负值方法之后,有问题。sysfunc(count(x,\"\"));跑出来是0。换个函数还求?或者换个方法,一维数组?
不过我还是比较感兴趣这个方法怎么解决,楼主知道什么其他函数吗,我一时半会想不起来了。

使用道具

7
manchengfu 发表于 2016-12-6 17:42:17 |只看作者 |坛友微信交流群
Strive、 发表于 2016-12-4 23:30
我试了下,估计是宏循环不能用普通变量的原因。   但是我把count1用宏变量负值方法之后,有问题。sysfunc ...
换了个方法,不直接用i在数据集里创建变量,而是创建宏变量。
  1. %macro test(varlist);

  2. data test;
  3. x=&varlist;
  4. count1=count(x,' ');
  5. put count1;
  6. do i=1 to 3;
  7. y=scan(x,i,' ');
  8. call symput("x"||left(i),y);
  9. put y;
  10. output;
  11. end;
  12. run;
  13. %mend;
复制代码

使用道具

8
manchengfu 发表于 2016-12-6 20:37:19 |只看作者 |坛友微信交流群
不过后续在调用这些变量的时候,如果要给变量名加后缀,还是无法回避之前的问题。
带有可变数字的宏变量究竟应该怎样调用?

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-23 23:42