【发布时间】:2018-10-24 01:28:18
【问题描述】:
在 SAS 中,如何有条件地折叠行,用一个明确命名的单行代替,表示值的总和?
具体来说,我希望创建一个频率表来显示值 子类 的频率,但条件是该频率大于 9。在任何其他情况下(频率 Class 的频率总和。数据集中没有缺失值或 0 值。
Freq Class Subclass
---------------------
20 1 1a
20 1 1b
2 1 1c
2 1 1d
2 1 1e
1 1 1f
22 2 2a
6 2 2b
2 2 2c
1 2 2d
31 3 3a
17 3 3b
7 3 3c
3 3 3d
3 3 3e
我目前的方法是使用以下方法生成第一个表:
proc sql;
create table as
select* count (distinct subjectID) as count
from DATASET1
group by Subclass
;
run; quit;
想要的结果应该是这样的:
Freq Class Subclass
---------------------
20 1 1a
20 1 1b
7 1 OTHER (1c, 1d, 1e, 1f)
22 2 2a
9 2 OTHER (2b, 2c, 2d)
31 3 3a
17 3 3b
13 3 OTHER (3c, 3d, 3e)
最好我还想根据行中表示的测量值的标识符,另外明确命名表示总测量值的 子类 值。在此示例中,这将是汇总的子类名称。
我尝试过使用Proc means 过程,它会生成一个所有Subclasses 频率
【问题讨论】:
-
freq 7 在您的数据集中具有第 3 类。但它在想要的数据集中有class1。如果可能的话,你能展示你的初始样本数据集
-
在 Class1 中,Subclass 1c、1,d、1e 和 1f 的频率分别为 2、2、2 和 1。这使得 Class1 中频率