全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3531 5
2012-10-09
%macro group(r);
%do i=1 %to &r;
data group&i;
set out&i._d;
  %do j=0 %to  int(tt/6)-1;
      %do p=6*&j+1 %to 6*&j+6;
      g=&j+1;output;
      %end;
  %end;
run;
%end;
%mend group;
%group(5);
ERROR: 在需要数值操作数的 %EVAL 函数或 %IF 条件中发现字符操作数。条件是: int(tt/6)-1
ERROR: %TO 值(%DO J 循环中)无效。
ERROR: 宏 GROUP 将终止执行
‘’在需要数值操作数的 %EVAL 函数或 %IF 条件中发现字符操作数‘’能不能详细解释一下为什么以及如何改正?我最近编宏总出现类似的错误,特别急切想知道原因及改正方法,十分感谢。
二维码

扫码加我 拉你入群

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

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

全部回复
2012-10-9 20:49:45
为什么需要用%do来循环呢? 变量tt应该是dataset out&i._d的一个column吧。do statement就应该可以了。
%macro group(r);
%do i=1 %to &r;
data group&i;
set out&i._d;
   do j=0 to int(tt/6))-1;
       do p=6*j+1 to 6*j+6;
       g=j+1;output;
      end;
   end;
   drop j p;
run;
%end;
%mend group;
%group(5);
二维码

扫码加我 拉你入群

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

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

2012-10-9 21:24:04
yuerqieqie 发表于 2012-10-9 20:49
为什么需要用%do来循环呢? 变量tt应该是dataset out&i._d的一个column吧。do statement就应该可以了。
%m ...
十分感谢。能不能解释一下宏语句%do和do语句的区别?我只知道宏语句%do
用来文本替换,能不能详细一点。谢谢!
二维码

扫码加我 拉你入群

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

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

2012-10-10 21:19:23
fyfzhdsfdx 发表于 2012-10-9 21:24
十分感谢。能不能解释一下宏语句%do和do语句的区别?我只知道宏语句%do
用来文本替换,能不能详细一点。 ...
%do j=0 %to  int(tt/6)-1; 相当于把文本赋给了j这个macro variable。尤其是%to这个部分,int(tt/6)-1被当作字符串赋给了j,这里不会做任何计算,也无法读取dataset中tt的值。
就我粗浅的理解,一般用%do是为了循环一些procedure,就像你用%do i=1 %to &r; data step; %end;一样。用在data step内部的话,一般是需要这个macro variable做文本,比如 %do j=0 %to  10; g_&j = tt + 1; %end; 这里是为了引用变量g_0到g_10。
二维码

扫码加我 拉你入群

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

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

2012-10-11 13:56:10
yuerqieqie 发表于 2012-10-10 21:19
%do j=0 %to  int(tt/6)-1; 相当于把文本赋给了j这个macro variable。尤其是%to这个部分,int(tt/6)-1被当 ...
明白了,学到了很多,十分感谢!
二维码

扫码加我 拉你入群

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

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

2013-1-17 15:36:49
%do自动创建了宏变量
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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