0

このような2つのデータセットがあります

データセット 1:

From       To           Period
01/1/2000  20/1/2000    1
21/1/2000  14/2/2000    2
15/2/2000  31/3/2000    3

データセット 2:

Date
15/1/2000
13/2/2000
20/3/2000

そして、望ましい結果は次のようになります。

Date        Period
15/1/2000   1
13/2/2000   2
20/3/2000   3

これに対する解決策は、レコードごとにデータセット 2 を調べ、データセット 2 の日付値を検索して、一致が見つかるまでデータセット 1 の From To の範囲と比較し、Period 値を取得することだと思います。SQLではなくSASデータステップコードでこれを行うことはできますか? そうすれば、パフォーマンスが向上しますか?

事前にご協力いただき、誠にありがとうございます。

4

2 に答える 2

1

ルックアップ データセットから情報形式を作成することが、ここに進む方法です。次に入力形式を使用して、INPUT 関数で値を作成します。

data ds1;
input From :ddmmyy10.  To :ddmmyy10. Period;
format From :ddmmyy10.  To :ddmmyy10.;
datalines;
01/1/2000  20/1/2000    1
21/1/2000  14/2/2000    2
15/2/2000  31/3/2000    3
;
run;

data ds2;
input date :ddmmyy10.;
format date ddmmyy10.;
datalines;
15/1/2000
13/2/2000
20/3/2000
;
run;

/* create dataset with informat details*/
data ds1_fmt;
set ds1;
rename from=start to=end period=label;
retain fmtname 'dt_fmt' type 'I';
run;

/* create informat from dataset */
proc format cntlin=ds1_fmt;
run;

/* create output dataset */
data want;
set ds2;
period=input(date,dt_fmt.);
run;
于 2014-10-16T09:55:36.317 に答える
0
data lookup;
INFILE DATALINES;
input @1 from mmddyy10. @12 to mmddyy10. @22 period $;
datalines;                      
01/01/2000 01/20/2000 1
01/21/2000 02/14/2000 2
02/15/2000 03/31/2000 3
;
data base;
infile datalines; 
input @1 date mmddyy10.;
datalines;
01/15/2000
02/13/2000
03/20/2000
;

proc sqlで試してください

proc sql;
create table result as
select put(b.date,mmddyy10.), (select max(period) from lookup l where b.date between l.from and l.to) as period
from base b;
quit;
于 2014-10-16T09:12:06.857 に答える