Loops SAS:动态复制一定数量的行
我有一个数据集,需要根据一个动态值将其吹出一定数量的行。以下面的数据集为例:Loops SAS:动态复制一定数量的行,loops,macros,sas,copy,row,Loops,Macros,Sas,Copy,Row,我有一个数据集,需要根据一个动态值将其吹出一定数量的行。以下面的数据集为例: DATA HAVE; LENGTH ID $3 COUNT 3; INPUT ID $ COUNT; DATALINES; A 4 B 3 C 1 D 2 ; RUN; ID=A需要放大4行,ID=B需要放大3行,等等。生成的数据集看起来是这样的(减去我拥有的一系列其他变量): 下面的代码在一定程度上可以正常工作,但动态设置&COUNT.
DATA HAVE;
LENGTH ID $3 COUNT 3;
INPUT ID $ COUNT;
DATALINES;
A 4
B 3
C 1
D 2
;
RUN;
ID=A需要放大4行,ID=B需要放大3行,等等。生成的数据集看起来是这样的(减去我拥有的一系列其他变量):
下面的代码在一定程度上可以正常工作,但动态设置&COUNT.
宏时遇到问题。我尝试插入一个CALL SYMPUTX(“COUNT”,COUNT)
语句,这样当它在每一行上循环时,计数被放入宏中,并且该行被吹扫到该行数
** THIS CODE ONLY WORKS IF YOU SET COUNT= TO SOME VALUE **;
%MACRO LOOPOVER();
DATA WANT; SET HAVE;
DO UNTIL(LAST.ID);
BY ID;
%DO I=1 %TO &COUNT.;
COUNT = &I.; OUTPUT;
%END;
END;
RUN;
%MEND;
%LOOPOVER;
** THIS CODE DOESN'T WORK BUT I'M NOT SURE WHY?? **;
%MACRO LOOPOVER();
DATA WANT; SET HAVE;
DO UNTIL(LAST.ID);
BY ID;
CALL SYMPUTX("COUNT",COUNT); /* NEW LINE HERE */
%DO I=1 %TO &COUNT.;
COUNT = &I.; OUTPUT;
%END;
END;
RUN;
%MEND;
%LOOPOVER;
不需要使用宏
data want(rename=(_count=count));
set have;
do i=1 to count;
_count=i;
output;
end;
drop count;
run;
不需要使用宏
data want(rename=(_count=count));
set have;
do i=1 to count;
_count=i;
output;
end;
drop count;
run;
实际上,您不需要一个新变量<代码>do count=1进行计数;产出;结束代码>很好用。哇,我想得太多了。谢谢你们两位!实际上,您不需要一个新变量<代码>do count=1进行计数;产出;结束代码>很好用。哇,我想得太多了。谢谢你们两位!