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