让我们将数据集视为下表中给出的内容:
TPMC PWC PWSC Site ET Date Time DIAM PXMC SF
7101 7101 US000521 1 Works1 08Nov2016 11:58 890,3 1
7102 7102 US000361 1 Works1 02Nov2016 13:01 878,1 1
7102 7102 UC000348 2 Works1 07Nov2016 18:22 877,3 1
7106 7106 UC00424 1 Works1 05Oct2016 9:43 890,4 1
7106 7106 UC00437 3 Works1 07Nov2016 18:23 877,1 1
7106 7106 UC309 4 Works1 07Nov2016 18:26 877,8 1
7107 7107 UC05327 1 Works1 06Oct2016 8:41 837 1
7107 7107 UC200 2 Works1 13Oct2016 12:53 890,55 1
7108 7108 UC000361 3 Works1 02Nov2016 13:01 878,1 1
7108 7108 UC00432 1 Works1 07Nov2016 18:25 877,8 1
7108 7108 UC106 2 Works1 03Oct2016 9:37 890,3 1
请使用以下代码获取上述数据表:
data have;
input TPMC $ PWC $ PWSC $ Site ET $ Date :date8. Time :TIME. DIAM PXMC $ SF;
FORMAT DATE date8. Time HHMM.;
datalines;
7101 7101 US000521 1 Works1 08Nov2016 11:58 890.3 1
7102 7102 US000361 1 Works1 02Nov2016 13:01 878.1 1
7102 7102 UC000348 2 Works1 07Nov2016 18:22 877.3 1
7106 7106 UC00424 1 Works1 05Oct2016 9:43 890.4 1
7106 7106 UC00437 3 Works1 07Nov2016 18:23 877.1 1
7106 7106 UC309 4 Works1 07Nov2016 18:26 877.8 1
7107 7107 UC05327 1 Works1 06Oct2016 8:41 837 1
7107 7107 UC200 2 Works1 13Oct2016 12:53 890.55 1
7108 7108 UC000361 3 Works1 02Nov2016 13:01 878.1 1
7108 7108 UC00432 1 Works1 07Nov2016 18:25 877.8 1
7108 7108 UC106 2 Works1 03Oct2016 9:37 890.3 1
;
run;
现在,当我使用以下SAS代码时:
data DaysBeforeAfterEvent;
set XX;
array x{1} _temporary_;
x{1}=Date;
call missing(of _all_);
do i=5 to 1 by -1;
Date=x{1}-i;output;
end;
set XX point=_n_; output;
call missing(of _all_);
do i=1 to 5;
date=x{1}+i;output;
end;
drop i;
run;
我会得到一个类似于下面给出的结果表:
TPMC PWC PWSC Site ET Date Time DIAM PXMC SF
03Nov2016
04Nov2016
05Nov2016
06Nov2016
07Nov2016
7101 7101 US000521 1 Works1 08Nov2016 11:58 890,3 1
09Nov2016
10Nov2016
11Nov2016
12Nov2016
13Nov2016
28Oct2016
29Oct2016
30Oct2016
31Oct2016
01Nov2016
7102 7102 US000361 1 Works1 02Nov2016 13:01 878,1 1
03Nov2016
04Nov2016
05Nov2016
06Nov2016
07Nov2016
7102 7102 UC000348 2 Works1 07Nov2016 18:22 877,3 1
.
.
.
但不幸的是,我没有得到我想要的东西。我需要最终结果看起来像下表中给出的结果:
TPMC PWC PWSC Site ET Date Time DIAM PXMC SF
7101 03Nov2016 0:00
7101 04Nov2016 0:00
7101 05Nov2016 0:00
7101 06Nov2016 0:00
7101 07Nov2016 0:00
7101 7101 US000521 1 Works1 08Nov2016 11:58 890,3 1
7101 09Nov2016 0:00
7101 10Nov2016 0:00
7101 11Nov2016 0:00
7101 12Nov2016 0:00
7101 13Nov2016 0:00
7102 28Oct2016 0:00
7102 29Oct2016 0:00
7102 30Oct2016 0:00
7102 31Oct2016 0:00
7102 01Nov2016 0:00
7102 7102 US000361 1 Works1 02Nov2016 13:01 878,1 1
7102 03Nov2016 0:00
7102 04Nov2016 0:00
7102 05Nov2016 0:00
7102 06Nov2016 0:00
7102 07Nov2016 0:00
7102 7102 UC000348 2 Works1 07Nov2016 18:22 877,3 1
.
.
.
.
答案 0 :(得分:1)
你需要:
如下:
data DaysBeforeAfterEvent;
set have;
array x{1} _temporary_;
x{1}=Date;
call missing(pwc, pwsc, site, diam, pxmc, sf, et);
time=0;
do i=5 to 1 by -1;
Date=x{1}-i;output;
end;
set have point=_n_; output;
call missing(pwc, pwsc, site, diam, pxmc, sf, et);
time=0;
do i=1 to 5;
date=x{1}+i;output;
end;
drop i;
run;
答案 1 :(得分:0)
最后这是有效的答案:
data have(index=(date));
infile cards truncover expandtabs;
input TPMC PWC PWSC $ Site ET $ Date : date9. Time $ DIAM $ PXMC $ SF;
format date date9.;
cards;
7101 7101 US000521 1 Works1 08Nov2016 11:58 890,3 1
7102 7102 US000361 1 Works2 02Nov2016 13:01 878,1 1
7102 7102 UC000348 2 Works3 07Nov2016 18:22 877,3 1
7106 7106 UC00424 1 Works1 05Oct2016 9:43 890,4 1
7106 7106 UC00437 3 Works2 07Nov2016 18:23 877,1 1
7106 7106 UC309 4 Works3 07Nov2016 18:26 877,8 1
7107 7107 UC05327 1 Works1 06Oct2016 8:41 837 1
7107 7107 UC200 2 Works2 13Oct2016 12:53 890,55 1
7108 7108 UC000361 3 Works1 02Nov2016 13:01 878,1 1
7108 7108 UC00432 1 Works2 07Nov2016 18:25 877,8 1
7108 7108 UC106 2 Works3 03Oct2016 9:37 890,3 1
;
run;
data want;
set have;
array x{1} _temporary_;
array y{1} $ 40 _temporary_;
x{1}=date;y{1}=TPMC;
call missing(of _all_);
TPMC=y{1};Time=0;
do i=5 to 1 by -1;
date=x{1}-i;output;
end;
set have point=_n_;output;
call missing(of _all_);
TPMC=y{1};Time=0;
do i=1 to 5;
date=x{1}+i;output;
end;
drop i;
run;