全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3475 4
2014-04-11
这段程序的目的是clean up问卷调查中的一些变量。
1. 这个是不用macro(只处理Q81大问题中的若干小问题)的,能运行通过。
data Q81;
        set a.beijing;
        array check(6, 9);
        do k = 1 to 9;
                if check(6, k) in (1, 2, 3) then do;
                        do i = 1 to 5;
                                check(i, k) = check(6, k);
                        end;
                end;
        end;
run;


2. 我写了个macro,但是运行之后报错。请帮忙看错在哪里,谢谢!
options nocenter date pageno=1 mprint symbolgen mlogic minoperator mindelimiter=',';
%macro cleanup(ds= , city= , row= );
        data &ds;
                set a.&city;
                array check(6, &row);
                %do k = 1 %to &row;
                        %if check(6, k) in (1, 2, 3) %then %do;
                                %do i = 1 %to 5;
                                        check(i, k) = check(6, k);
                                %end;
                        %end;
                %end;
        run;
%mend;
%cleanup(ds= Q81, city= beijing, row= 9);

ERROR: Required operator not found in expression: check(6, k) in (1, 2, 3)
ERROR: The macro CLEANUP will stop executing.





二维码

扫码加我 拉你入群

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

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

全部回复
2014-4-11 00:32:12
循环中的k是宏变量吧
二维码

扫码加我 拉你入群

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

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

2014-4-11 00:47:14
gongxun1234 发表于 2014-4-11 00:32
循环中的k是宏变量吧
改了一下,还是同样报错。

options nocenter date pageno=1 mprint symbolgen mlogic minoperator mindelimiter=',';
%macro cleanup(ds= , city= , row= );
        data &ds;
                set a.&city;
                array check(6, &row);
                %do k = 1 %to &row;
                        %if check(6, &k) in (1, 2, 3) %then %do;
                                %do i = 1 %to 5;
                                        check(&i, &k) = check(6, &k);
                                %end;
                        %end;
                %end;
        run;
%mend;
%cleanup(ds= Q81, city= beijing, row= 9);

ERROR: Required operator not found in expression: check(6, &k) in (1, 2, 3)
ERROR: The macro CLEANUP will stop executing.

二维码

扫码加我 拉你入群

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

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

2014-4-11 01:05:37
options nocenter date pageno=1 mprint symbolgen mlogic minoperator mindelimiter=',';
%macro cleanup(ds= , city= , row= );
        data &ds;
                set a.&city;
                array check(6, &row);
                %do k = 1 %to &row;
                        if check(6, &k.) in (1, 2, 3) then do;
                                %do i = 1 %to 5;
                                        check(&i, &k) = check(6, &k);
                                %end;
                        end;
                               
                %end;
        run;
%mend;
%cleanup(ds= Q811, city=beijing, row= 9);
二维码

扫码加我 拉你入群

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

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

2014-4-11 01:27:00
gongxun1234 发表于 2014-4-11 01:05
options nocenter date pageno=1 mprint symbolgen mlogic minoperator mindelimiter=',';
%macro cleanup ...
谢谢:)
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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