根据 SAS 中的条件从主 table 创建 tables
Creating tables from a master table based on a condition in SAS
数据如下:
ID Var1 Var2
一个 1 2
一个 3 4
B 5 6
B 7 8
C 9 10
D 11 12
我正在尝试在 SAS 中从上面的主 table 创建子集 tables,这样每个子集 table 都有来自主 table 的所有记录,其中ID 等于每个不同的值。因此,在这个特定示例中,我想动态创建 4 个不同的 tables Tab_A、Tab_B、Tab_C、Tab_D,其中 Tab_A包含来自 master table 的所有记录,其中 ID=A 等等。要创建的 table 总数 = ID 的不同值。
这是创建宏的好案例。 SAS 宏动态地编写 SAS 代码。
此宏读取不同的 ID 值,然后生成数据步骤以执行子集。它使用 mprint
选项,因此您可以查看它创建的代码。
data have;
input ID $ Var1 Var2;
datalines;
A 1 2
A 3 4
B 5 6
B 7 8
C 9 10
D 11 12
;
run;
%macro subset();
proc sql noprint;
select count(distinct id)
into :nIDs TRIMMED
from have;
select distinct ID
into :ID1 - :ID&nIDs
from have;
quit;
data
%do i=1 %to &nIDs;
tab_&&id&i
%end;
;
set have;
select (ID);
%do i=1 %to &nIDs;
when ("&&id&i") output tab_&&id&i;
%end;
otherwise put "PROBLEM";
end;
run;
%mend;
options mprint;
%subset;
这是显示实际执行子集的 SAS 数据步骤的日志。
MPRINT(SUBSET): data tab_A tab_B tab_C tab_D ;
MPRINT(SUBSET): set have;
MPRINT(SUBSET): select (ID);
MPRINT(SUBSET): when ("A") output tab_A;
MPRINT(SUBSET): when ("B") output tab_B;
MPRINT(SUBSET): when ("C") output tab_C;
MPRINT(SUBSET): when ("D") output tab_D;
MPRINT(SUBSET): otherwise put "PROBLEM";
MPRINT(SUBSET): end;
MPRINT(SUBSET): run;
数据如下:
ID Var1 Var2
一个 1 2
一个 3 4
B 5 6
B 7 8
C 9 10
D 11 12
我正在尝试在 SAS 中从上面的主 table 创建子集 tables,这样每个子集 table 都有来自主 table 的所有记录,其中ID 等于每个不同的值。因此,在这个特定示例中,我想动态创建 4 个不同的 tables Tab_A、Tab_B、Tab_C、Tab_D,其中 Tab_A包含来自 master table 的所有记录,其中 ID=A 等等。要创建的 table 总数 = ID 的不同值。
这是创建宏的好案例。 SAS 宏动态地编写 SAS 代码。
此宏读取不同的 ID 值,然后生成数据步骤以执行子集。它使用 mprint
选项,因此您可以查看它创建的代码。
data have;
input ID $ Var1 Var2;
datalines;
A 1 2
A 3 4
B 5 6
B 7 8
C 9 10
D 11 12
;
run;
%macro subset();
proc sql noprint;
select count(distinct id)
into :nIDs TRIMMED
from have;
select distinct ID
into :ID1 - :ID&nIDs
from have;
quit;
data
%do i=1 %to &nIDs;
tab_&&id&i
%end;
;
set have;
select (ID);
%do i=1 %to &nIDs;
when ("&&id&i") output tab_&&id&i;
%end;
otherwise put "PROBLEM";
end;
run;
%mend;
options mprint;
%subset;
这是显示实际执行子集的 SAS 数据步骤的日志。
MPRINT(SUBSET): data tab_A tab_B tab_C tab_D ;
MPRINT(SUBSET): set have;
MPRINT(SUBSET): select (ID);
MPRINT(SUBSET): when ("A") output tab_A;
MPRINT(SUBSET): when ("B") output tab_B;
MPRINT(SUBSET): when ("C") output tab_C;
MPRINT(SUBSET): when ("D") output tab_D;
MPRINT(SUBSET): otherwise put "PROBLEM";
MPRINT(SUBSET): end;
MPRINT(SUBSET): run;