(第一次发帖)
我有一个数据集,我需要创建一个新变量(在SAS中),基于满足与另一个变量相关的条件。因此,数据包含调查中的三个变量:Site,IDnumb(person)和Date。不同的人可以在同一站点进行多次回复(参见站点A的人1和3)。
Site IDnumb Date
a 1 6/12
b 2 3/4
c 4 5/1
a 3 .
d 5 .
我想创建一个名为Complete的新变量,但它不能包含重复项。因此,当我去处理频率时,我希望使用完成调查的6/12日期对站点A进行一次计数。所以基本上,如果一个站点被表示两次并且在一个中包含一个Date,我想只计算那个并忽略没有日期的重复站点。
N %
Complete 3 75%
Last Month 1 25%
我的问题可能是NODUP和NODUPKEY的可能性。如果我按站点和日期进行Proc Sort(nodupkey),那会消除“a 3”吗?
非常感谢任何帮助。对于混乱的“桌子”感到抱歉,因为这是我的第一篇文章(也欢迎提供更好的提示)。
答案 0 :(得分:2)
你可以通过多种方式做到这一点。
首先,您需要一个完整/不完整的二进制变量。无论如何你都在datastep中,不妨在那里完成所有工作。
proc sort data=yourdata;
by site date descending;
run;
data yourdata_want;
set yourdata;
by site date descending;
if first.site then do;
comp = ifn(date>0,1,0);
output;
end;
run;
proc freq data=yourdata_want;
tables comp;
run;
如果你使用了NODUPKEY,你首先按SITE DATE DESCENDING排序,然后通过SITE与NODUPKEY排序。这样最新的日期是最重要的。您还可以格式化COMP以包含您列出的文本标签,而不仅仅是1/0。
您也可以在DATE使用格式,因此您可以跳过数据步骤(仍需要排序/排序nodupkey)。将DATE的所有非缺失值格式化为“完成”并将日期缺失值设置为“上个月”,然后在proc频率中包含缺少的选项。
最后,您可以在SQL中执行该表(尽管获得两行更难,您必须同时联合两个查询)。