2016-09-19 15 views
0

私は、01.08.2016から30.08.2016までの観測値を持つ表を持っています。次のように12個のテーブルを作成する方法 :SASでループを使用して1つのテーブルから複数のテーブルを作成する方法は?

  1. 最初のものは2016年8月20日に日付2016年8月1日からの観察が含まれています。
  2. 第2のものは、01.08.2016から21.08.2016までの観測値を含む。 ...
  3. 第12番目には、01.08.2016から30.08.2016までの観測が含まれています。

私はそれがループを使う方が良いと思いますが、方法は分かりません。

答えて

0

これは、日付がSASの日付形式であることを前提としています。日付が文字形式の場合は、文字比較を使用できます。

出力文が実行された後も、データベクトルには観測結果が含まれています。したがって、条件が真である限り、データステップは複数のデータセットに同じ観測値を書き込みます。また、12のデータセットが必要な場合は、8月31日までの日付比較が必要になると思います。

data want1 want2 want3 ... want12; 
set have; 
if date <= '20AUG2016'd then output want1; 
if date <= '21AUG2016'd then output want2; 
if date <= '22AUG2016'd then output want3; 
. 
. 
. 
if date <= '31AUG2016'd then output want12; 
run; 
0

WHERE文を使用する方が、別の表を作成する方が良いでしょう。しかし、ハードコーディングなしでどちらかを行うには、コード生成を使用する必要があります。これは、通常、マクロロジックを使用して行われます。

%macro split(start,stop); 
%local i n; 
%let n=%sysfunc(intck(day,&start,&stop)); 
%let n=%eval(&n+1); 
DATA 
%do i=1 %to &n; 
    WANT&i 
%end; 
; 
    set have ; 
%do i=1 %to &n ; 
    if date <= %sysfunc(intnx(day,&start,&i-1)) then output WANT&i ; 
%end; 
run; 
%mend split; 

%split('20AUG2016'd,'31AUG2016'd); 
関連する問題