2016-11-14 9 views
1

はのは、以下の表に与えられているものとして、データセットを考えてみましょう:私は、次のSASコードを使用するときに今SAS - データセットの特定の日付の5日前と5日後に日付を追加します。他の列で値を繰り返す方法は?

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; 

:上記のデータテーブルの次のコードを使用

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 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 
. 
. 
. 
. 

答えて

1

あなたがする必要があります:それはすべての関連するデータを持っていなかったとして、あなたの入力サンプルデータから

  • ドロップSFを
  • 時間がゼロに設定されている(欠落していない)
  • 欠落していると思われる変数のみを設定します。

次のように:

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; 

enter image description here

+1

おおとても簡単だった...と私は多くの理由のためのSFを削除することはできません:)ありがとう、それは働いた! – ZeekDSA

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; 
関連する問題