各グループの値を簡単に比較できるように、PROCTRANSPOSEを使用します。例えば:
data groups1;
input id $ grp age sex $;
datalines;
1 1 60 M
2 1 21 M
3 2 30 M
4 2 25 F
5 3 45 F
6 3 30 F
7 3 18 M
8 4 32 M
9 4 18 M
10 4 16 M
;
run;
proc sort data=groups1;
by grp; /* This maintains age order */
run;
proc transpose data=groups1 out=groups2;
by grp;
var age;
run;
転置されたデータを使用すると、好きな比較を行うことができます(質問から正確に何が欲しいかわからないので、最初の2つの年齢を比較するだけです)。
/* With all ages of a particular group in a single row, it is easy to compare */
data outgroups1(keep=grp);
set groups2;
if abs(col1-col2)>5 then output;
run;
この場合、これは、適用される条件をすべて満たす(コードを動的に生成して含める)グループごとに個別のデータセットを作成するための私の好ましい方法です。
/* A separate data set per GRP value in OUTGROUPS1 */
filename dynacode catalog "work.dynacode.mycode.source";
data _null_;
set outgroups1;
file dynacode;
put "data grp" grp ";";
put " set groups1(where=(grp=" grp "));";
put "run;" /;
run;
%inc dynacode;