2017-04-15 11 views
-1

現在、2つのSASデータセット(サンプルとマスター)を使ってSASプログラミングを実践しています。以下は、SASプログラミングを通じて私の問題を解決するための例示的な目的のために作成された仮説またはダミーのデータです。私は、マスターデータセットからIDのサンプルデータセットのデータを抽出したいと思います。私はいくつかのidをサンプルデータセットとして提供しています。そのためには、年次情報に基づいてidごとにマスターテーブルから最後の12か月の情報を抽出する必要があります。sasを使用してIDと月ごとに過去12ヶ月間のデータを効率的に抽出します

これに似て、私は各idとyearmonthの12ヶ月のデータが必要な多くの列を持っています。

私はdoループでコードを書いてサンプルデータセットの各行を反復してから、各繰り返しの開始(年月と終了日(12月前))からマスターテーブルのデータを見つけてから、転置しますそれから、idとyearmonthを使ってデータステップマージを使ってサンプルデータセットを転置データとマージします。しかし、私が書いたコードは、サンプルデータセットの各行に対して何度もループしているため最適化されていません。 。誰もが最適化された方法でSASプログラミングを使用してこの問題を解決するために私を助けて

  1. 1つのサンプルデータセット(データセット名 - サンプル)
  2. 。 0

    ​​


  3. つのマスタデータセット(データセット名<オール=「2」スタート> - 日までにアカウントを開始してから、各IDの年間マスターデータセットの巨大なデータセットを。)

ID \t YEARMONTH \t NO_OF_CUST 
 

 
1 \t 200808 \t 125 
 
1 \t 200809 \t 125 
 
1 \t 200810 \t 111 
 
1 \t 200811 \t 174 
 
1 \t 200812 \t 98 
 
1 \t 200901 \t 45 
 
1 \t 200902 \t 74 
 
1 \t 200903 \t 73 
 
1 \t 200904 \t 101 
 
1 \t 200905 \t 164 
 
1 \t 200906 \t 104 
 
1 \t 200907 \t 22 
 
1 \t 200908 \t 35 
 
1 \t 200909 \t 50 
 
1 \t 200910 \t 77 
 
1 \t 200911 \t 86 
 
1 \t 200912 \t 95 
 
1 \t 201001 \t 95 
 
1 \t 201002 \t 87 
 
1 \t 201003 \t 79 
 
1 \t 201004 \t 71 
 
1 \t 201005 \t 65 
 
1 \t 201006 \t 66 
 
1 \t 201007 \t 66 
 
1 \t 201008 \t 78 
 
1 \t 201009 \t 88 
 
1 \t 201010 \t 54 
 
1 \t 201011 \t 45 
 
1 \t 201012 \t 100 
 
1 \t 201101 \t 136 
 
1 \t 201102 \t 111 
 
1 \t 201103 \t 17 
 
1 \t 201104 \t 77 
 
1 \t 201105 \t 111 
 
1 \t 201106 \t 95 
 
1 \t 201107 \t 79 
 
1 \t 201108 \t 777 
 
1 \t 201109 \t 758 
 
1 \t 201110 \t 32 
 
1 \t 201111 \t 15 
 
1 \t 201112 \t 22 
 
2 \t 200711 \t 150 
 
2 \t 200712 \t 150 
 
2 \t 200801 \t 44 
 
2 \t 200802 \t 385 
 
2 \t 200803 \t 65 
 
2 \t 200804 \t 66 
 
2 \t 200805 \t 200 
 
2 \t 200806 \t 333 
 
2 \t 200807 \t 285 
 
2 \t 200808 \t 265 
 
2 \t 200809 \t 222 
 
2 \t 200810 \t 220 
 
2 \t 200811 \t 205 
 
2 \t 200812 \t 185 
 
2 \t 200901 \t 65 
 
2 \t 200902 \t 45 
 
2 \t 200903 \t 69 
 
2 \t 200904 \t 546 
 
2 \t 200905 \t 21 
 
2 \t 200906 \t 256 
 
2 \t 200907 \t 214 
 
2 \t 200908 \t 14 
 
2 \t 200909 \t 44 
 
2 \t 200910 \t 65 
 
2 \t 200911 \t 88 
 
2 \t 200912 \t 79 
 
2 \t 201001 \t 65 
 
2 \t 201002 \t 45 
 
2 \t 201003 \t 69 
 
2 \t 201004 \t 54 
 
2 \t 201005 \t 14 
 
2 \t 201006 \t 26 
 
2 \t 201007 \t 98 
 
3 \t 200912 \t 77 
 
3 \t 201001 \t 66 
 
3 \t 201002 \t 69 
 
3 \t 201003 \t 7 
 
3 \t 201004 \t 7 
 
3 \t 201005 \t 7 
 
3 \t 201006 \t 65 
 
3 \t 201007 \t 75 
 
3 \t 201008 \t 85 
 
3 \t 201009 \t 89 
 
3 \t 201010 \t 100 
 
3 \t 201011 \t 75 
 
3 \t 201012 \t 75

以下は、各サンプルIDのサンプルデータセットを更新しようとしているサンプル出力です。あなたは今のところ、少しあなたが欲しいものを把握することは困難ではなく、画像ファイルのかもしれませんが、同じ結果を得るための「SAS」の方法でやろうとしていたもののサンプルコードなし

enter image description here

+0

で私の答えを編集しました。例:https://meta.stackoverflow.com/questions/277716/how-to-create-table-in-so-question – Snorex

+0

あなたの質問は、特定のプログラミングに関する質問ではなく、 https://codereview.stackexchange.com/ – Snorex

+0

1.データとして画像を追加しました。このデータを使用するには、入力する必要があります。 2.これまでに問題を解決しようとしているコードを投稿していません。 3.これは、必要な計算のロジックを記述するために必要なデータの再フォーマットだけではありません。 4.これは有効なSOの質問ではありません。なぜなら、それは完全割り当てとあなたの仕事のようなものですからです。特定の質問をすることはできますが、これは広すぎます。 – Reeza

答えて

1

次のようにしてください。

EDIT:それは最後の12ヶ月かかりますので、あなたがテキストテーブルでこれらの画像を交換する場合、私たちは私たちの答えにあなたのフィールド名をコピー&ペーストすることができますID

data test; 
    infile datalines dlm='09'x; 
    input ID YEARMONTH NO_OF_CUST; 
    datalines; 
1 200808 125 
1 200809 125 
1 200810 111 
1 200811 174 
1 200812 98 
1 200901 45 
1 200902 74 
1 200903 73 
1 200904 101 
1 200905 164 
1 200906 104 
1 200907 22 
1 200908 35 
1 200909 50 
1 200910 77 
1 200911 86 
1 200912 95 
1 201001 95 
1 201002 87 
1 201003 79 
1 201004 71 
1 201005 65 
1 201006 66 
1 201007 66 
1 201008 78 
1 201009 88 
1 201010 54 
1 201011 45 
1 201012 100 
1 201101 136 
1 201102 111 
1 201103 17 
1 201104 77 
1 201105 111 
1 201106 95 
1 201107 79 
1 201108 777 
1 201109 758 
1 201110 32 
1 201111 15 
1 201112 22 
2 200711 150 
2 200712 150 
2 200801 44 
2 200802 385 
2 200803 65 
2 200804 66 
2 200805 200 
2 200806 333 
2 200807 285 
2 200808 265 
2 200809 222 
2 200810 220 
2 200811 205 
2 200812 185 
2 200901 65 
2 200902 45 
2 200903 69 
2 200904 546 
2 200905 21 
2 200906 256 
2 200907 214 
2 200908 14 
2 200909 44 
2 200910 65 
2 200911 88 
2 200912 79 
2 201001 65 
2 201002 45 
2 201003 69 
2 201004 54 
2 201005 14 
2 201006 26 
2 201007 98 
3 200912 77 
3 201001 66 
3 201002 69 
3 201003 7 
3 201004 7 
3 201005 7 
3 201006 65 
3 201007 75 
3 201008 85 
3 201009 89 
3 201010 100 
3 201011 75 
3 201012 75 
; 
run; 

proc sort data=test; 
    by id yearmonth; 
run; 

data result; 
    set test; 
    array prev_month {13} PREV_MONTH_0-PREV_MONTH_12; 
    by id; 

    if first.id then do; 
     do i = 1 to 13; 
      prev_month(i) = 0; 
     end; 
    end; 

    do i = 13 to 2 by -1; 
     prev_month(i) = prev_month(i-1); 
    end; 
    prev_month(1) = NO_OF_CUST; 

    drop i PREV_MONTH_0; 
    retain PREV_MONTH:; 
run;  
+0

ありがとうございます、以前の12ヶ月のデータを抽出するのに問題ありません。次の12ヶ月のデータを抽出したい場合 – user3762120

+0

12ヶ月前のレコードを取得する方法 – user3762120

+0

yearmonth変数の前にdecendingを追加してください – Seba

関連する問題