0

(第一次发布)
我有一个数据集,我需要在满足与另一个变量相关的条件的基础上创建一个新变量(在 SAS 中)。因此,数据包含来自调查的三个变量:站点、IDnumb(人)和日期。可以有来自不同人但在同一站点的多个响应(参见站点 A 中的人员 1 和 3)。

Site  IDnumb    Date 
    a     1      6/12
    b     2       3/4
    c     4       5/1
    a     3       .  
    d     5       .  

我想创建一个名为 Complete 的新变量,但它不能包含重复项。所以,当我去 proc freq 时,我希望使用 6/12 完成调查的日期对站点 A 进行一次计数。所以基本上,如果一个站点被表示两次并且包含一个日期,我只想计算那个并忽略没有日期的重复站点。

                N    %

Complete        3   75%
Last Month      1   25%

我的问题可能是关于 NODUP 和 NODUPKEY 的可能性。如果我按站点和日期进行 Proc 排序(nodupkey),那会消除 obs “a 3.”吗?

任何帮助将不胜感激。对不起,混乱的“桌子”,因为这是我的第一篇文章(也欢迎提出更好的建议)。

4

1 回答 1

2

您可以通过多种方式做到这一点。

首先,您需要一个完整/不完整的二进制变量。如果您无论如何都在数据步骤中,不妨就在那里完成所有工作。

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 排序,然后使用 NODUPKEY 按 SITE 排序。这样最新的日期就排在首位了。您还可以将 COMP 格式化为您列出的文本标签,而不仅仅是 1/0。

您也可以使用 DATE 上的格式来执行此操作,因此您可以跳过数据步骤(仍然需要排序/排序 nodupkey)。将 DATE 的所有非缺失值格式化为“完成”,将日期的缺失值格式化为“上个月”,然后在您的 proc freq 中包含缺失的选项。

最后,您可以在 SQL 中创建表(虽然这样获取两行有点困难,但您必须将两个查询合并在一起)。

于 2013-06-11T17:53:46.123 回答