gpt4 book ai didi

sql - 使用 proc 转置计算观察次数

转载 作者:行者123 更新时间:2023-12-04 23:51:16 24 4
gpt4 key购买 nike

在 SAS 中,我有一张这样的表:

ID   ACTE 
1 A
2 B
1 A
1 A
2 C
1 B

我想要下表:
ID    A    B    C
1 3 1 0
2 0 1 1

第二个表是一个带有 ID 的表,对于列 ACTE 中的每个可能值,它是该 ID 出现的时间量。

我想知道是否可以使用 proc transpose 来做到这一点。

我试过这段代码,但它产生了错误:
proc transpose data=OriginalTable out=TestTranspose;
by ID;
var Acte;
id Acte;
run;

最佳答案

您可以使用计算计数并将其传递给 proc transpose 的中间步骤。 .
前任:

PROC SQL;
CREATE VIEW OriginalTable_v as
SELECT
ID
,ACTE
,COUNT(*) AS FREQ
FROM OriginalTable
GROUP BY ID ,ACTE
ORDER BY ID ,ACTE ;
QUIT;

proc transpose data=OriginalTable_v out=TestTranspose;
by ID;
var FREQ;
id Acte;
run;

注意:如果数据中不存在 ID & ACTE 组合,上述方法将返回一个缺失值。换句话说,上面的输出将与您想要的输出相同,只是它在您有 0 的地方会有缺失值。

您可以通过一个步骤来处理此问题的另一种方法 - 假设您事先知道 ACTE 中的类别,并且它们只是一个小问题。其中将如下:
PROC SQL;
CREATE table TestTranspose2 as
SELECT
ID
,sum(case when acte='A' then 1 else 0 end) as count_A
,sum(case when acte='B' then 1 else 0 end) as count_B
,sum(case when acte='C' then 1 else 0 end) as count_C
,sum(case when acte NOT IN ('A', 'B', 'C') then 1 else 0 end) as count_Other
,COUNT(*) AS FREQ_of_ids
FROM OriginalTable
GROUP BY ID
ORDER BY ID ;
QUIT;

上面,在不存在 ID 和 ACTE 组合的情况下,产生与您相同的输出,带有 0。

关于sql - 使用 proc 转置计算观察次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21549968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com