如何根据匹配日期对数据进行子集和设置值

时间:2019-06-24 18:46:25

标签: sas

我有一个像这样的表

id -日期 ------------

x --- 01/01/2019 ---- 1

y --- 01/01/2019 ---- 2

x --- 01/02/2019 ---- 1

z --- 01/03/2019 ---- 1

我正在尝试选择where id in (x,y)

然后,一旦有了该子集,我想检查x是否具有相同日期的y

  • 如果确实如此,那么我想从具有该日期的行中将new设置为value,将x和y都设置为id=y-
  • 否则,new仅设置为value

因此表将变为

id -日期 ------------ - >

x --- 01/01/2019 ---- 1 -------- 2

y --- 01/01/2019 ---- 2 -------- 2

x --- 01/02/2019 ---- 1 -------- 1

z --- 01/03/2019 ---- 1 -------- 1

我完全不确定该怎么做

我开始对数据进行细分:

IF id='x' OR id='y' THEN DO;

/*...*/

END;

ELSE new=value;

任何帮助将不胜感激

此外,我无法在代码中使用实际日期 我不需要一般化id,我明确知道我需要比较/检查x和y(y是我正在使用的数据中x的跟进)

1 个答案:

答案 0 :(得分:0)

我最近answered有一个类似的问题。对于这样的问题,基本SAS不太方便-使用DATA步骤解决该问题需要以正确的顺序进行排序,然后按BY组进行读取,并retain将数据跨行进行。

这在SQL中更容易:您可以通过将原始表(T)与自身的子集(Y)({id})放在date上左联接来获得您所描述的预期结果。加入后,new可以计算为coalesce(Y.value, T.value)