我必须在特定条件下从大型数据集中准备5张表格。5个表的obs总数为1000。我已经准备好了前四张桌子。对于第五张表,我很难选择obs(1000减去和(表1至4))。
我可以手动对odsnumber求和,但是由于必须定期执行,因此会影响效率。谁能指导我如何改善这些脚本?
Proc sql;
select nobs
into: odsnumber trimmed
from sashelp.vtable
where libname='work' and memname in ('table1' 'table2' 'table3' 'table4')
;quit;
data table5;
set source;
if 1<=_N_<=sum(1000,manual calculation of nobs from 4 tables);
run;
计算SQL中四个NOBS的总和,您将不必手动计算它。
在SQL中,我更喜欢使用DICTIONARY
表而不是SASHELP.V*
视图。需要从DATA
或PROC
步骤访问元数据时,请使用视图。
libname
和memname
值始终为大写。
示例:
data table1; do row = 1 to 10; output; end;
data table2; do row = 1 to 100; output; end;
data table3; do row = 1 to 100; output; end;
data table4; do row = 1 to 40 ; output; end;
data source; do row = 1 to 2500; output; end;
proc sql NOPRINT;
select SUM(nobs)
into: NOBS_OF_4_TABLES trimmed
from DICTIONARY.TABLES
where libname='WORK'
and memname in ('TABLE1' 'TABLE2' 'TABLE3' 'TABLE4')
;
%put NOTE: &=NOBS_OF_4_TABLES; %* Check log to see value computed;
data table5;
set source;
if _N_ > 1000 - &NOBS_OF_4_TABLES then stop;
run;