这是我的第一篇文章,所以请让我知道,如果我不够清楚。这是我想要做的 - 这是我的数据集。我的做法是有一个滞后的做循环,但结果是垃圾。现在SAS做循环+滞后函数?
data a;
input @1 obs @4 mindate mmddyy10. @15 maxdate mmddyy10.;
format mindate maxdate date9.;
datalines;
1 01/02/2013 01/05/2013
2 01/02/2013 01/05/2013
3 01/02/2013 01/05/2013
4 01/03/2013 01/06/2013
5 02/02/2013 02/08/2013
6 02/02/2013 02/08/2013
7 02/02/2013 02/08/2013
8 03/10/2013 03/11/2013
9 04/02/2013 04/22/2013
10 04/10/2013 04/22/2013
11 05/04/2013 05/07/2013
12 06/10/2013 06/20/2013
;
run;
,我想产生一个新列 - “替换”基于以下逻辑:
- 如果其滞后组件的maxDate之前发生了记录的MINDATE,它不能进行更换它。如果不能替代,则跳过前进(如2,3,4不能替换1,但可以替换5)。
- 否则...如果mindate小于30天,替换= Y.如果不是,则替换= N.一旦一个记录替换另一个(所以在这种情况下,5替换1,因为02/02/2013但是如果它是一个N的上面一个记录,它仍然可以是一个其他记录的Y,所以,现在对6进行评估对2, 7对3等,因为这两个组合都是“Y”,所以现在评估8与4相比,但是因为其相对于4的最大值的相对大于30,它是N.但是,它接着针对
- 评估在...
我应该在100个记录数据集中,这将暗示第100条记录可以在技术上取代第1条记录,所以我一直在尝试循环内的滞后。任何提示/帮助非常感谢!预期输出:
obs mindate maxdate Replacement
1 02JAN2013 05JAN2013
2 02JAN2013 05JAN2013
3 02JAN2013 05JAN2013
4 03JAN2013 06JAN2013
5 02FEB2013 08FEB2013 Y
6 02FEB2013 08FEB2013 Y
7 02FEB2013 08FEB2013 Y
8 10MAR2013 11MAR2013 Y
9 02APR2013 22APR2013 Y
10 10APR2013 22APR2013 N
11 04MAY2013 07MAY2013 Y
12 10JUN2013 20JUN2013 Y
你能发布你的预期输出吗?我在想,SQL自加入是你需要做的,而不是循环/滞后。你尝试过的任何代码都有帮助:) – Reeza 2015-02-10 04:58:58
@Reeza - 这可能也可以使用双DOW循环完成。 – user667489 2015-02-10 08:24:45
@ Reeza。谢谢。预期的输出是: – AidKulesh 2015-02-10 14:54:55