我有一个数据集,其中包含ID和一个称为CC的变量。 CC包含多个编号的值,其中每个值表示某些内容。看起来像这样:
一个ID可以在多行中具有相同的CC,我只想标记CC是否存在,所以即使Joe有五行表明他的CC等于3我也只想用1或0来说明Joe CC等于3。
我希望它看起来像这样:
我尝试按如下所示对其进行编码,但问题是,尽管我知道一个ID可以具有多种类型的CC,但是从代码创建的最终数据集对于每个填充的ID仅显示1个CC。我认为可能是覆盖了吗? 另外我应该注意,在此代码之前,我创建了CC Flag变量并将其全部填充为零。
proc sql;
DROP TABLE Flagged_CCs;
CREATE TABLE Flagged_CCs AS
select
ID,
COUNT(ID) as count_ID,
case when CC=1 then 1 end as CC_1,
case when CC=2 then 1 end as CC_2,
case when CC=3 then 1 end as CC_3
from Original_Dataset
group by ID;
quit;
感谢您的帮助,谢谢。
答案 0 :(得分:1)
您的问题是,在运行新代码后,每个ID仍然可以获得多行吗?
如果是这样,我建议这样做:
proc sql;
DROP TABLE Flagged_CCs;
CREATE TABLE Flagged_CCs AS
select ID
,case when CC_1 >0 then 1 else 0 end as CC_1
,case when CC_2 >0 then 1 else 0 end as CC_2
,case when CC_3 >0 then 1 else 0 end as CC_3
from (
select
ID,
COUNT(ID) as count_ID,
sum(case when CC=1 then 1 end) as CC_1,
sum(case when CC=2 then 1 end) as CC_2,
sum(case when CC=3 then 1 end) as CC_3
from Original_Dataset
group by ID
);
quit;
出现问题的原因是,您只汇总ID的计数,而不汇总其他值,对它们使用汇总将消除重复的记录。
希望这会有所帮助
答案 1 :(得分:1)