redaring 发表于 2010-2-2 11:26 
5# bobguy
不管var2 var3 var4之间怎样,只是以var1为标准,如果var1=0,而var2在同一条记录中也同为0,那么就把整个var2这个变量删除。
我主要是用于计算的,我想对var1中的空值进行插值,但是其他变量如果在var1为空的时候,他们(例如var2)在同一条记录中也是空的话,那么就没有办法计算,所以要把这整个变量删掉。保留下来的变量,在其他地方是空值的话是不影响的,只要不要和var1同时为空就行。
不知道我是否表达清楚了。
I am still not quite clear. The following could be a template which you can modify according to your needs.
326 data t1;
327
328 do i = 1 to 20;
329 var1=floor(ranuni(112345)*10);
330 var2=floor(ranuni(112345)*10);
331 var3=ceil(ranuni(112345)*10);
332 var4=floor(ranuni(112345)*10);
333 output;
334 put @1 var1= @10 var2= @20 var3= @30 var4=;
335 end;
336 run;
var1=6 var2=6 var3=3 var4=1
var1=4 var2=4 var3=10 var4=9
var1=1 var2=4 var3=4 var4=2
var1=5 var2=8 var3=9 var4=2
var1=5 var2=1 var3=7 var4=9
var1=9 var2=9 var3=8 var4=3
var1=5 var2=0 var3=7 var4=5
var1=1 var2=5 var3=8 var4=3
var1=1 var2=9 var3=4 var4=5
var1=6 var2=0 var3=4 var4=8
var1=3 var2=2 var3=6 var4=3
var1=3 var2=9 var3=3 var4=6
var1=0 var2=3 var3=7 var4=4
var1=3 var2=4 var3=10 var4=7
var1=0 var2=8 var3=8 var4=1
var1=0 var2=3 var3=7 var4=3
var1=5 var2=0 var3=7 var4=6
var1=1 var2=7 var3=3 var4=0
var1=3 var2=3 var3=10 var4=1
var1=6 var2=2 var3=5 var4=3
NOTE: The data set WORK.T1 has 20 observations and 5 variables.
NOTE: DATA statement used (Total process time):
real time 0.01 seconds
cpu time 0.01 seconds
337
338 data _null_;
339 array checkvar(3) var2-var4;
340 array dropvar_index ( 3) _temporary_;
341 set t1 end=end;
342 do i=1 to dim(checkvar);
343 if dropvar_index(i) ne 1 then do;
344 if checkvar(i) = 0 then dropvar_index(i)=1;
345 end;
346 end;
347 if end then do;
348 call execute('data new; set t1(keep=var1 ' );
349 do i = 1 to dim ( checkvar );
350 if dropvar_index(i) ne 1 then call execute(vname( checkvar(i) ) );
351 end;
352 call execute( ');run;' );
353 end;
354 run;
NOTE: There were 20 observations read from the data set WORK.T1.
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
NOTE: CALL EXECUTE generated line.
1 + data new; set t1(keep=var1
2 + var3
3 + );run;
NOTE: There were 20 observations read from the data set WORK.T1.
NOTE: The data set WORK.NEW has 20 observations and 2 variables.
NOTE: DATA statement used (Total process time):
real time 0.01 seconds
cpu time 0.00 seconds