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_Copy_Row - Fatal编程技术网

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进行计数;产出;结束很好用。哇,我想得太多了。谢谢你们两位!