2016-08-25 28 views
0

私は現在、日付形式のデータを持っていますが、基礎となる情報は実際にはまだSASの日付です。したがって、このフィールドをカウントすると、SAS番号ごとに別々の行が表示され、情報は月にグループ化されません。月にSAS日付をグループ化する

私のデータはこのように見えます。それはOriginal_Start_Date」のカテゴリに順列をカウントするために来るとき

data beforehave; 
    input ID $ Activity $ Origianl_Start_Date; 
    datalines; 
    12345 Activity1 Oct-13 
    12345 Activity1 Oct-13 
    12345 Activity1 Nov-16 
    12345 Activity2 Nov-16 
    12345 Activity2 Nov-16 
    23145 Activity1 Sep-15 
    23145 Activity2 Sep-15 
    23145 Activity2 Sep-15 
; 
RUN; 

しかし、私はこの

data beforehave; 
    input ID $ Activity $ Origianl_Start_Date Count_of_Original_Start_Date; 
    datalines; 
    12345 Activity1 Oct-13 1 
    12345 Activity1 Oct-13 1 
    12345 Activity1 Nov-16 1 
    12345 Activity2 Nov-16 1 
    12345 Activity2 Nov-16 1 
    23145 Activity1 Sep-15 1 
    23145 Activity2 Sep-15 1 
    23145 Activity2 Sep-15 1 
; 
RUN; 

は、しかし、私が欲しいものである。この取得します。

data beforehave; 
    input ID $ Activity $ Origianl_Start_Date Count_of_Original_Start_Date; 
    datalines; 
    12345 Activity1 Oct-13 2 
    12345 Activity1 Nov-16 1 
    12345 Activity2 Nov-16 2 
    23145 Activity1 Sep-15 1 
    23145 Activity2 Sep-15 2 
; 
RUN; 

私はこれを取って、しかし、日付としてそれを維持するために、本当に有用であろう文字形式にそれを回すことについて考えていました。

私が本当に望むのは、その月に基づいてSASの日付番号をグループ化できることです。

+0

どのようにデータをまとめていますか? 'freq'や' means'のような手続きはフォーマットされた値で自動的にグループ化されますが、 'by'ステートメントで' groupformat'オプションを使わない限り、データステップは基礎となる値を使用します。 – Longfish

答えて

2

私のコメントで言及したように、ここでは目標を達成する2つの方法があります。最も簡単なのは、proc summaryです。これは、フォーマットされた値で自動的にグループ化されるためです。 2番目のオプションはbyステートメントのgroupformatオプションのデータステップです。これにはあらかじめproc sortが必要です。

data have; 
    input ID $ Activity $10. Original_Start_Date :date7.; 
    format Original_Start_Date monyy5.; 
    datalines; 
    12345 Activity1 01Oct13 
    12345 Activity1 02Oct13 
    12345 Activity1 03Nov16 
    12345 Activity2 04Nov16 
    12345 Activity2 05Nov16 
    23145 Activity1 06Sep15 
    23145 Activity2 07Sep15 
    23145 Activity2 08Sep15 
; 
RUN; 

/* method 1 */ 
proc summary data=have nway; 
class id activity original_start_date; 
output out=want1 (drop=_type_ rename=(_freq_=Count_of_Original_Start_Date)); 
run; 

/* method 2 */ 
proc sort data=have; 
by id activity original_start_date; 
run; 

data want2; 
set have; 
by id activity original_start_date groupformat; 
if first.original_start_date then Count_of_Original_Start_Date=0; 
Count_of_Original_Start_Date+1; 
if last.original_start_date then output; 
run; 
0

私はこのためのproc SQLを使用して好む:

data have; 
    input ID $ Activity $10. Original_Start_Date :date7.; 
    format Original_Start_Date monyy5.; 
    datalines; 
    12345 Activity1 01Oct13 
    12345 Activity1 02Oct13 
    12345 Activity1 03Nov16 
    12345 Activity2 04Nov16 
    12345 Activity2 05Nov16 
    23145 Activity1 06Sep15 
    23145 Activity2 07Sep15 
    23145 Activity2 08Sep15 
; 
Run; 

proc sql; 
    create table want as 
    select ID,Activity,Original_Start_Date,count(*) as Count_of_Original_Start_Date 
    from have 
    group by 1,2,3; 
quit; 
関連する問題