扫描宏变量中的值,并使用SAS将其存储在数据集中的列中
输出: 表1 Col1 234.34 C56.67 2345.67 C67.56 这是一个错误,有人能告诉我:扫描宏变量中的值,并使用SAS将其存储在数据集中的列中,sas,sas-macro,Sas,Sas Macro,输出: 表1 Col1 234.34 C56.67 2345.67 C67.56 这是一个错误,有人能告诉我: %let abc = ("234.34", "C56.67", "2345.67", "C67.56") ; 您不需要一个宏和一种方法来实现这一点 %macro generate ; %local i ; data table1; length Col1 $100.; %do i=1 %to %sysfunc(countw(&abc.
%let abc = ("234.34", "C56.67", "2345.67", "C67.56") ;
您不需要一个宏和一种方法来实现这一点
%macro generate ;
%local i ;
data table1;
length Col1 $100.;
%do i=1 %to %sysfunc(countw(&abc.));
Col1 = %scan(&abc., &i.,,"sq");
output;
%end;
run;
%mend;
%generate;
您不需要一个宏和一种方法来实现这一点
%macro generate ;
%local i ;
data table1;
length Col1 $100.;
%do i=1 %to %sysfunc(countw(&abc.));
Col1 = %scan(&abc., &i.,,"sq");
output;
%end;
run;
%mend;
%generate;
一种proc-sql方法
%let abc=(“234.34”、“C56.67”、“2345.67”、“C67.56”)代码>
它将扫描由“”、“
”分隔的宏,并在每个循环中按1前进
%let abc=(“234.34”、“C56.67”、“2345.67”、“C67.56”)代码>
它将扫描以“”、“
”分隔的宏,并在每个循环中按1前进。您可以使用do
循环执行此操作,但需要从宏变量的值中删除()
proc sql;
create table tab1 (col1 varchar(100));
quit;
options macrogen mlogic;
%macro gen;
%let i = 1;
%do %while (%scan(%superq(abc),&i,%str(,)) ne %str( ));
proc sql;
insert into tab1
values(%scan(%superq(abc),&i,%str(,)));
quit;
%let i = %sysevalf(&i + 1);
%end;
%mend gen; %gen;
如果值不包含()
,则您也可以使用%scan(&abc,1,())
,这还有一个优点,即无论原始值是否包含()
或者只需从值中删除()
,并在需要宏变量的地方使用宏变量时将其添加回去
%let abc = ("234.34", "C56.67", "2345.67", "C67.56") ;
data table1;
length Col1 $100.;
do Col1 = %substr(&abc,2,%length(&abc)-2);
output;
end;
run;
可以使用do
循环执行此操作,但需要从宏变量的值中删除()
proc sql;
create table tab1 (col1 varchar(100));
quit;
options macrogen mlogic;
%macro gen;
%let i = 1;
%do %while (%scan(%superq(abc),&i,%str(,)) ne %str( ));
proc sql;
insert into tab1
values(%scan(%superq(abc),&i,%str(,)));
quit;
%let i = %sysevalf(&i + 1);
%end;
%mend gen; %gen;
如果值不包含()
,则您也可以使用%scan(&abc,1,())
,这还有一个优点,即无论原始值是否包含()
或者只需从值中删除()
,并在需要宏变量的地方使用宏变量时将其添加回去
%let abc = ("234.34", "C56.67", "2345.67", "C67.56") ;
data table1;
length Col1 $100.;
do Col1 = %substr(&abc,2,%length(&abc)-2);
output;
end;
run;
为什么使用宏循环而不是数据步循环?尝试一下,它会工作得很好。您是否尝试过%scan(%superq(abc),&I,%str(,)
?我尝试过使用下面的代码,它也无法工作数据表1;长度1.100美元。;i=1到%sysfunc(countw(&abc.));Col1=%scan(&abc.,&i.,“sq”);产出;结束;跑或者,创建表tab1(col1 varchar(32));插入tab1值(%scan(%superq(abc),&i,%str(,)代码>首先创建空白表,并用Do-while循环插入值。这是问题,我把ABC作为一个标准宏从一个过程中,我不能改变为什么你使用宏循环而不是数据步进循环?尝试一下,它会工作得很好。您是否尝试过%scan(%superq(abc),&I,%str(,)
?我尝试过使用下面的代码,它也无法工作数据表1;长度1.100美元。;i=1到%sysfunc(countw(&abc.));Col1=%scan(&abc.,&i.,“sq”);产出;结束;跑或者,创建表tab1(col1 varchar(32));插入tab1值(%scan(%superq(abc),&i,%str(,)代码>首先创建空白表,并用Dewhile while循环插入值。这是问题,我将ABC作为一个标准宏从一个过程中得到,我不能改变它。