新的SAS变量以观察为条件

时间:2013-06-11 15:30:59

标签: sas

(第一次发帖)
我有一个数据集,我需要创建一个新变量(在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”吗?

非常感谢任何帮助。对于混乱的“桌子”感到抱歉,因为这是我的第一篇文章(也欢迎提供更好的提示)。

1 个答案:

答案 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中执行该表(尽管获得两行更难,您必须同时联合两个查询)。