x***6 发帖数: 15 | 1 版上牛人多,问一个处理data的问题。
data中的subject,如果满足3个条件中的一个就可以。
1。var1 等于8个数值中的一个,
2。var1 介于一个范围也可以,
3。var2-9 等于3个值中一个也可以。
这个该怎么编?我想的是分别弄出符合条件的3个data,然后合并。
还是一个能处理完?
多谢了! | H*******r 发帖数: 98 | 2 one is...
data select;
set original;
where var1 in (value1 value2 value3 value4 value5 value6 value7 value8)
or
var1 between minvalue and maxvalue or
var2 in (number1 number2 number3) or
var3 in (number1 number2 number3) or
var4 in (number1 number2 number3) or
var5 in (number1 number2 number3) or
var6 in (number1 number2 number3) or
var7 in (number1 number2 number3) or
var8 in (number1 number2 number3) or
var9 in (number1 number2 number3);
run;
or...
proc format;
invalue cona value1= _same_
value2= _same_
value3= _same_
value4= _same_
value5= _same_
value6= _same_
value7= _same_
value0= _same_
other= 999999;
invalue conb minvalue - maxvalue= _same_
other= 999999;
invalue conc number1= _same_
number2= _same_
number3= _same_
other= 999999;
run;
data select;
set original;
if input(var1, cona.)^= 999999 or
input(var1, conb.)^= 999999 or
input(var2, conc.)^= 999999 or
input(var3, conc.)^= 999999 or
input(var4, conc.)^= 999999 or
input(var5, conc.)^= 999999 or
input(var6, conc.)^= 999999 or
input(var7, conc.)^= 999999 or
input(var8, conc.)^= 999999 or
input(var9, conc.)^= 999999;
run;
... | w*******9 发帖数: 1433 | 3 The code could be shorter:
data new;
set old;
indx = 0;
if var1 in (8个数字)or var1 between a and b then indx=1;
do i=2 to 9;
if vvaluex(compress("var"||i)) in (3 个数字)then indx=1;
end;
run;
Then just select those obs with indx=1.
【在 x***6 的大作中提到】 : 版上牛人多,问一个处理data的问题。 : data中的subject,如果满足3个条件中的一个就可以。 : 1。var1 等于8个数值中的一个, : 2。var1 介于一个范围也可以, : 3。var2-9 等于3个值中一个也可以。 : 这个该怎么编?我想的是分别弄出符合条件的3个data,然后合并。 : 还是一个能处理完? : 多谢了!
| t*****w 发帖数: 254 | 4 * data three is what you wanted *;
data one;
input var1-var9;
cards;
1 2 3 7 9 9 4 7 10
1.1 4.1 4 3 3.4 7 7.4 8 7.3
2 2.1 2.5 2 2.1 5 2 2.1 2.5
;
data two three;
set one;
if var1 in (1, 4, 4,3 , 3.4, 7, 7.4, 8, 7.3,9) then output three;
else if 4 le var1 le 6 then output three;
array eight_var{8} var2-var9;
do i =1 to 8;
if eight_var{i} in (5, 5.1,5.5) then output three;
end;
output two;
run;
proc print data=three;
run; | x***6 发帖数: 15 | |
|