如何根据SAS中的类别扩展数据集? (For loop?)

时间:2015-09-28 14:00:26

标签: sas

首先,为模糊的标题道歉,但我真的不知道如何说出我要问的内容。我有一个SAS数据集,它给出了单位ID,工作ID以及每个工资组合中单位工作组合的员工数量(即,对于单元1,工作A,A组中有3名员工,2 B级员工等)。我想吹嘘这一点,以便我在每一行中都有一名员工来衡量分散,方差,均值,中位数等。以下是我拥有的和我想要的一个例子。任何帮助将不胜感激。谢谢!

我有什么:

data have;
length id1 id2 $20;
infile datalines dlm=' ';
input id1 $ id2 $ a  b  c ;
datalines;
123 A1 2 1 0
123 A2 0 1 1
123 A3 1 0 0
456 A1 0 3 0
456 A2 1 1 1
456 A3 1 2 1
;

我想把它变成:

                                  ID1    IDS    Category

                                  123    A1       A
                                  123    A1       A
                                  123    A1       B
                                  123    A2       B
                                  123    A2       C
                                  123    A3       A
                                  456    A1       B
                                  456    A1       B
                                  456    A1       B
                                  456    A2       A
                                  456    A2       B
                                  456    A2       C
                                  456    A3       A
                                  456    A3       B
                                  456    A3       B
                                  456    A3       C

1 个答案:

答案 0 :(得分:1)

我希望你会找到一个更好的解决方案,我无法弄清楚你想要得到的结果是什么。 无论如何,可以使用一对嵌套的do循环派生所请求的数据集:

data prova;
length id1 id2 a b c $20;
infile datalines dlm=' ';
input id1 $ id2 $ a $ b $ c $;
datalines;
123 A1 2 1 0
123 A2 0 1 1
123 A3 1 0 0
456 A1 0 3 0
456 A2 1 1 1
456 A3 1 2 1
;

data prova01;
length category $20;
set prova;

array ncats[*] a b c;
array chcats[*] $ ac bc cc ('a' 'b' 'c');

do i=1 to dim(ncats);
do j=1 to ncats[i];
category=chcats[i];
output;
end;
end;

drop i j ac bc cc a b c;
run;