对于sas的变量,sum等于零

时间:2014-06-19 12:31:57

标签: sql sas

我看了互联网,但找不到任何相关内容。

我有一张包含数千个变量的表。

我试图对一个变量求和,并找出总和中的变量等于零。

示例

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;

我做错了什么?

感谢您提供任何可以帮助我解决的问题。

2 个答案:

答案 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;