Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 如何在另一个宏中迭代执行sas宏?_Loops_Macros_Sas_Do Loops - Fatal编程技术网

Loops 如何在另一个宏中迭代执行sas宏?

Loops 如何在另一个宏中迭代执行sas宏?,loops,macros,sas,do-loops,Loops,Macros,Sas,Do Loops,我想得到品牌的结果。 宏无法处理%do循环语句中的i=2,3,4。 如何迭代执行doing_评分宏 谢谢 %doing_scoring; ... ... ... %mend doing_scoring; %macro brand_channel; proc sql noprint; create table oneb_onec as select unique x1, x2 from mydata_all; quit; data se

我想得到品牌的结果。 宏无法处理%do循环语句中的i=2,3,4。 如何迭代执行doing_评分宏

谢谢

%doing_scoring;
...
...
...
%mend doing_scoring;

%macro brand_channel;
proc sql noprint;
    create table oneb_onec as
        select unique x1, x2  
           from mydata_all;
    quit;

data seq_oneb_onec;
set oneb_onec;
seqno = _N_;
run;

%let num=4;
%do i=1 %to  #
    %put doing number is &i;
    %put end doing number is #

proc sql noprint;
    create table onebc_table&i as
        select    a.* 
        from       mydata_all a, seq_oneb_onec b
        where    b.seqno = &i
            and    b.x1 = a.x1
            and    b.x2 = a.x2;
        quit;
%doing_scoring(mydata=onebc_table&i, setnumber = &i);
%end;

%mend brand_channel;

%brand_channel;

您的代码很好,除了第一行(做评分的声明),但我想这可能是转录错误。 下面我有一个功能测试版本

然而,我有更好的方法来做同样的事情。从根本上说,宏观驱动的迭代是一个坏主意;有一种更好的方法可以完成您可能想要尝试的几乎所有任务

在这种情况下,您可以直接从seq_u数据集调用doing_评分调用,并将子数据集的创建移动到宏中(应该很容易),或者最好将数据集保持在一个整体中

第一种更好的方法:调用execute。(或者,您可以使用
select-into
在SQL中创建宏调用)

现在,原来的方法与相同的测试数据

%macro doing_scoring(mydata=,setnumber=);
%put doing_scoring &mydata. &setnumber.;
%mend doing_scoring;

%macro brand_channel;
proc sql noprint;
    create table oneb_onec as
        select distinct age,sex
           from sashelp.class;
    quit;

data seq_oneb_onec;
set oneb_onec;
seqno = _N_;
run;

%let num=4;
%do i=1 %to  #
    %put -------------------;
    %put doing number is &i;
    %put end doing number is #

proc sql noprint;
    create table onebc_table&i as
        select    a.* 
        from       sashelp.class a, seq_oneb_onec b
        where    b.seqno = &i
            and    b.age = a.age
            and    b.sex = a.sex;
        quit;
%doing_scoring(mydata=onebc_table&i, setnumber = &i);
%put -------------------;
%end;

%mend brand_channel;

%brand_channel;

我假设您正在尝试创建
%doing\u scoring()
宏?如果是这样,您需要将其定义为
%macro do_scoring();…%修补而不是
%doing_scoring;…%修理
%macro doing_scoring(mydata=,setnumber=);
%put doing_scoring &mydata. &setnumber.;
%mend doing_scoring;

%macro brand_channel;
proc sql noprint;
    create table oneb_onec as
        select distinct age,sex
           from sashelp.class;
    quit;

data seq_oneb_onec;
set oneb_onec;
seqno = _N_;
run;

%let num=4;
%do i=1 %to  #
    %put -------------------;
    %put doing number is &i;
    %put end doing number is #

proc sql noprint;
    create table onebc_table&i as
        select    a.* 
        from       sashelp.class a, seq_oneb_onec b
        where    b.seqno = &i
            and    b.age = a.age
            and    b.sex = a.sex;
        quit;
%doing_scoring(mydata=onebc_table&i, setnumber = &i);
%put -------------------;
%end;

%mend brand_channel;

%brand_channel;