SAS中特定观察前后的计数
我有这个SAS数据集:SAS中特定观察前后的计数,sas,Sas,我有这个SAS数据集: symbol date type 1010 01/01/2012 . 1010 01/02/2012 . 1010 01/03/2012 . 1010 01/04/2012 . 1010 01/05/2012 0 1010 01/06/2012 . 1010 01/07/2012 . 1202 02/26/2013 . 1202 02/27/2013 . 1202 02/28
symbol date type
1010 01/01/2012 .
1010 01/02/2012 .
1010 01/03/2012 .
1010 01/04/2012 .
1010 01/05/2012 0
1010 01/06/2012 .
1010 01/07/2012 .
1202 02/26/2013 .
1202 02/27/2013 .
1202 02/28/2013 0
1202 03/01/2013 .
1202 03/02/2013 .
1202 03/03/2013 .
1202 03/04/2013 .
数据集按符号和日期分组,其中符号为公司
我想使用SAS创建另一个变量,以计算每个公司Type=0之前从-1开始的天数,Type=0之后从1开始的天数,因此新列或变量如下
symbol date type count
1010 01/01/2012 . -4
1010 01/02/2012 . -3
1010 01/03/2012 . -2
1010 01/04/2012 . -1
1010 01/05/2012 0 0
1010 01/06/2012 . 1
1010 01/07/2012 . 2
1202 02/26/2013 . -2
1202 02/27/2013 . -1
1202 02/28/2013 0 0
1202 03/01/2013 . 1
1202 03/02/2013 . 2
1202 03/03/2013 . 3
1202 03/04/2013 .
任何帮助都将不胜感激。
谢谢这里有一个解决方案,我做了几个假设:
- 每个符号都有一个仅出现一次的类型值0,而所有其他值均丢失
- Count是类型值0的日期与当前记录日期之间的天数
/* create source data */
data have;
input symbol date :mmddyy10. type;
format date date9.;
datalines;
1010 01/01/2012 .
1010 01/02/2012 .
1010 01/03/2012 .
1010 01/04/2012 .
1010 01/05/2012 0
1010 01/06/2012 .
1010 01/07/2012 .
1202 02/26/2013 .
1202 02/27/2013 .
1202 02/28/2013 0
1202 03/01/2013 .
1202 03/02/2013 .
1202 03/03/2013 .
1202 03/04/2013 .
;
run;
/* sort data, making type value 0 the first record per symbol */
proc sort data=have;
by symbol descending type date;
run;
/* calculate difference in days between records */
data want;
set have;
by symbol;
retain date_zero;
if first.symbol then do;
count=0; /* set first record to zero */
date_zero=date; /* store date for calculations */
end;
else count=date-date_zero; /* numbers of days from first record */
drop date_zero;
run;
/* sort data back to original order */
proc sort data=want;
by symbol date;
run;
这几天总是连续的吗?i、 e.同一符号的两个条目之间没有遗漏日期