全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1702 3
2018-01-13
悬赏 10 个论坛币 已解决
我这个宏是关于看t年表A是否出现在t+1年至t+5年的表B里,运行时候出现的问题是:“在需要数值操作数的%EVAL函数或%IF条件中发现字符操作数。条件是%J”
我截取了前一部分程序,我知道问题出在了标黄的地方但是我不知道怎么改,请大家帮忙谢谢。
  • %MACRO TEST_MACRO();
  • %LET YEAR=2004;
  •             %DO I=0 %TO 9;
  •             %LET YEAR1=%EVAL(&YEAR.+&I.);
  •                                     PROC SORT DATA=WORK.A&YEAR1.;BY ID;RUN;
  •                         %DO J=1 %TO 5;
  •             %LET YEAR%EVAL(&J.)=%EVAL(&YEAR.+&I.+&J.);
  •                         %LET T_YEAR=&&YEAR&J..;
  •                         PROC SORT DATA=WORK.B&T_YEAR.;BY ID;RUN;
  •                         %END;

最佳答案

舍身卫道 查看完整内容

楼主不要意思 前2天我没看论坛,这是我测试之后的代码 测试没问题,你试下,我追到这回答你的问题,也是没谁了
二维码

扫码加我 拉你入群

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

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

全部回复
2018-1-13 10:40:17
复制代码


楼主不要意思 前2天我没看论坛,这是我测试之后的代码 测试没问题,你试下,我追到这回答你的问题,也是没谁了
二维码

扫码加我 拉你入群

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

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

2018-1-13 21:41:05
%MACRO TEST_MACRO();
%LET YEAR=2004;
            %DO I=0 %TO 9;
            %LET YEAR1=%EVAL(&YEAR.+&I.);
                                    PROC SORT DATA=WORK.A&YEAR1.;BY ID;RUN;
                        %DO J=1 %TO 5;
            %LET YEAR&i.&J.=%EVAL(&YEAR.+&I.+&J.);
                        %LET T_YEAR=&&YEAR&J..;
                        PROC SORT DATA=WORK.B&T_YEAR.;BY ID;RUN;
                        %END;

你可以把%eval去掉试试看。
二维码

扫码加我 拉你入群

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

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

2018-1-14 10:44:58
在宏里面,宏变量所代表的值,都是字符串来的,除了两个特殊的宏函数:%eval  %sysevalf ,是在宏环境中
把数字 转换成数值类型来使用,你这里定义宏变量,宏变量本身是字符串的内容,所以无需使用 %eval 来处理。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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