Loops 如何在另一个宏中迭代执行sas宏?
我想得到品牌的结果。 宏无法处理%do循环语句中的i=2,3,4。 如何迭代执行doing_评分宏 谢谢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
%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;