SAS-根据ID列的值将单个列拆分为两列

SAS-根据ID列的值将单个列拆分为两列,sas,Sas,我有如下数据 data have; input group replicate $ sex $ count; datalines; 1 A F 3 1 A M 2 1 B F 4 1 B M 2 1 C F 4 1 C M 5 2 A F 5 2 A M 4 2 B F 6 2 B M 3 2 C F 2 2 C M 2 3 A F 5 3 A M 1 3 B F 3 3 B M 4 3 C F 3 3 C M 1 ; run; 我想根据性别将count列分为两个单独的列

我有如下数据

data have;
  input group replicate $ sex $ count;

datalines;
1 A F 3
1 A M 2
1 B F 4
1 B M 2
1 C F 4
1 C M 5
2 A F 5
2 A M 4
2 B F 6
2 B M 3
2 C F 2
2 C M 2
3 A F 5
3 A M 1
3 B F 3
3 B M 4
3 C F 3
3 C M 1
;
run;
我想根据性别将count列分为两个单独的列

                                                 count_    count_
                    Obs    group    replicate    female     male

                     1       1          A           3         2
                     2       1          B           4         2
                     3       1          C           4         5
                     4       2          A           5         4
                     5       2          B           6         3
                     6       2          C           2         2
                     7       3          A           5         1
                     8       3          B           3         4
                     9       3          C           3         1
这可以通过首先为每个性别级别创建两个独立的数据集,然后执行合并来完成

data just_female;
  set have;
  where sex = 'F';
  rename count = count_female;
run;

data just_male;
  set have;
  where sex = 'M';
  rename count = count_male;
run;

data want;
  merge
    just_female
    just_male
  ;
  by
    group
    replicate
  ;

  keep
    group
    replicate
    count_female
    count_male
  ;
run;
是否有一种不需要排序或显式删除/保留变量的不太详细的方法来执行此操作?

您可以使用proc transpose来执行此操作,但需要对数据进行排序。我相信这就是你想要的

proc sort data=have;
by group replicate;
run;
数据已排序,因此现在您可以按组进行转置

proc transpose data=have out=want(drop=_name_) prefix=count_;
by group replicate;
id sex;
var count;
run;

proc print data=want;
然后你会得到:

Obs    group    replicate    count_F    count_M

 1       1          A           3          2
 2       1          B           4          2
 3       1          C           4          5
 4       2          A           5          4
 5       2          B           6          3
 6       2          C           2          2
 7       3          A           5          1
 8       3          B           3          4
 9       3          C           3          1