0

SASデータセットがあり、必要に応じて並べ替えています。それをBYグループに分割し、グループごとに、特定の列に特定の値が最初に出現するまで、各観測値を出力したいと思います。

ID番号C1年2C3日付(DD / MM / YYYY)
-------------------------------------------------- -------      
AB123 4 B4 2008EOC2008年9月4日
AB123 3 B4 2008EEL2008年9月4日
AB123 2 B4 2008EZZ2008年9月4日
AB123 1 B4 2008EOC2008年9月4日
AB123 0 B4 2008EZZ2008年9月4日
AB123 1 B4 2008EOC2008年6月2日
AB123 0 B4 2008EZZ2008年6月2日

これは1つのBYグループです。データセットはID、C1、Year2でグループ化され、ID、C1、Year2、Date(desc)、No(desc)でソートされます。ID、C1、およびYear2のそれぞれのさらなるインスタンスは、データセットのどこにでも発生する可能性がありますが、3つの変数が各BYグループを定義します。

C3で最初に発生するZZまでのBYグループごとのすべての観測値を出力したいと思います。したがって、上記では、最初の3つの観測値を出力(またはフラグを立てる)してから、次のBYグループに移動します。

どんな助けでも大歓迎です。問題の詳細が必要な場合はお知らせください。ありがとう。

4

1 に答える 1

3

これが機能する1つの方法です。

data have;
input ID $ No C1 $ Year2 $ C3 $ Date :DDMMYY10.;
format date DDMMYY10.;
cards;
AB123   4   B4  2008E   OC  09/04/2008
AB123   3   B4  2008E   EL  09/04/2008
AB123   2   B4  2008E   ZZ  09/04/2008
AB123   1   B4  2008E   OC  09/04/2008
AB123   0   B4  2008E   ZZ  09/04/2008
AB123   1   B4  2008E   OC  06/02/2008
AB123   0   B4  2008E   ZZ  06/02/2008
;
run;

data want (drop=stopflag);
set have;
by id c1 year2;
retain stopflag;
if max(first.id,first.c1,first.year2)=1 then stopflag=0;
if c3='ZZ' and stopflag=0 then do;
    output;
    stopflag=1;
end;
if stopflag=0 then output;
run;
于 2012-07-11T09:33:28.370 に答える