我看了互联网,但找不到任何相关内容。
我有一张包含数千个变量的表。
我试图对一个变量求和,并找出总和中的变量等于零。
示例
col1 col2 col3
0 0 0
1 0 2
1 0 3
结果
col2
0
但是,我的proc means
不想接受我的where子句。
proc sql;
create table toto as select nomvar,monotonic() as num_lig from dicofr
where nomvar <> 'date';
proc sql;
select nomvar into :varnom separated by ' ' from toto
where num_lig between 0 and 1000;
%put varnom: &varnom;
proc means data=afr sum (where=(sum(&varnom)=0) ;
var &varnom;
output out=want;
run;
我做错了什么?
感谢您提供任何可以帮助我解决的问题。
答案 0 :(得分:0)
实现这一目标的几种方法,这是一个datastep / array方法:
%LET NVARS = 1000 ; data want ; set have end=eof ; array n{*} col1-col&NVARS ; array t{&NVARS} 5. _TEMPORARY_ ; do i = 1 to dim(n) ; t{i} + n{i} ; end ; if eof then do ; do i = 1 to dim(t) ; if missing(t{i}) or t{i} = 0 then do ; vname = vname(n{i}) ; put "Sum of " vname "= 0" ; /* write message to log */ output ; /* Write to dataset */ end ; end ; end ; keep vname ; run ;
答案 1 :(得分:0)
这样做。我认为这需要SAS 9.3+用于stackedodsoutput
选项。
*Generating some data;
data have;
array x[100];
call streaminit(7);
do i = 1 to 20;
do _t = 1 to dim(x);
if rand('Uniform') < 0.9 then x[_t]=0;
else x[_t]=1;
end;
output;
end;
run;
*ods output grabs what you want from proc means;
ods output summary=want(where=(sum=0));
proc means data=have sum stackodsoutput;
var x:;
run;
ods output close;