基于观测值的新SAS变量

基于观测值的新SAS变量,sas,Sas,(首次发布) 我有一个数据集,需要在满足与另一个变量相关的条件的基础上创建一个新变量(在SAS中)。因此,数据包含来自调查的三个变量:Site、IDnumb(person)和Date。在同一个站点上,可能有来自不同人员的多个响应(参见站点A中的人员1和3) 我想创建一个名为Complete的新变量,但它不能包含重复项。因此,当我转到proc freq时,我希望使用完成调查的6/12日期对站点A进行一次计数。因此,基本上,如果一个站点被表示两次,并且在一个站点中包含一个日期,我只想计算这个站点,忽

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

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

                N    %

我的问题可能是关于点头和点头的可能性。如果我按站点和日期进行Proc排序(nodupkey),这会消除obs“a3”吗


任何帮助都将不胜感激。对不起,这张“桌子”太乱了,因为这是我的第一篇帖子(也欢迎大家提示如何做得更好)

您可以通过多种方式实现这一点

首先,您需要一个完整/不完整的二进制变量。不管怎样,如果你在数据步骤中,不妨在那里全部完成

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,您首先要按站点日期降序排序,然后使用NODUPKEY按站点排序。这样的话,最新的日期是最重要的。您还可以格式化COMP,使其具有列出的文本标签,而不仅仅是1/0

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


最后,您可以使用SQL来创建表(尽管获取两行这样的数据有点困难,但您必须将两个查询合并在一起)。

您是否正在决定如何记录此数据,或者是否有需要处理的数据?要发布代码或类似表,请在不使用BRs的情况下输入它,突出显示它,然后点击control-K。您可以发布所需的输出表吗?你说你想要一个新变量,你真的想要吗?它将包含什么?我有数据,我希望创建一些描述性统计数据。例如,完成调查的站点的频率。在上面的例子中,我想创建一个表,显示每个站点一次,然后显示它们是否完成了调查(如果日期没有丢失)。因此,4个站点中有3个(75%)已完成调查,4个站点中有1个(25%)已在当月完成。@Joe感谢您提供的格式提示!非常感谢你!最后一个问题是“comp=ifn(date>0,1,0)。”我理解了这一步。这将创建一个新变量“comp”,如果日期大于0,SAS将输入“1”,如果不大于0,SAS将输入“0”?是。IFN类似于Excel IF语句-
IFN(布尔表达式,如果为真则返回,如果为假则返回,如果缺少则返回)虽然“缺失”通常是不可能的。在这种情况下,我倾向于直接指定“布尔”结果,即
comp=(日期>0)。SAS将结果转换为True=1,False=0,以便给出完全相同的结果。我发现当我检查代码时更容易理解发生了什么;对一些人来说,这更让人困惑,对一些人来说,就更少了。我自己可能会使用布尔值,但我发现对于新手用户来说,这更令人困惑。
Complete        3   75%
Last Month      1   25%
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;