我想知道是否有办法在SAS中查询选择子组,就像Postgres中的select选项一样
SELECT *
FROM s.diagnoses
WHERE icd9code = ANY ('{2910,2911,2912,2913,2914,2915,3456,3457,3458}');
还有办法指定范围而不是实际值,例如:介于2910-2915之间
诊断代码是非数字字符。我正在使用SAS大学版。
答案 0 :(得分:0)
如果是角色,则无法使用该范围。但您可以使用in
声明
SELECT * FROM s.diagnoses WHERE icd9code in ('2910','2911','2912');
答案 1 :(得分:0)
如果您想指定范围,则必须将字符字段转换为数字,然后给出范围
/***** if you want to mention each icd9code*****/
data have;
set diagnoses (where=(icd9code in ('2910' '2911' '2912' '2913' '2914' '2915' '3456' '3457' '3458')));
run;
/***** if you want to give range *****/
data have;
set diagnoses;
if input(icd9code ,4.) >= 2910 and input(icd9code ,4.) <= 3458;
run;
如有任何疑问,请与我联系。
答案 2 :(得分:0)
选择范围。您可以定义自己的宏来生成范围如此
的字符串%macro range(start, stop);
%if &start. = &stop. %then %do;
"&stop."
%end;
%else %do;
"&start.", %range(%sysevalf(&start+1), &stop);
%end;
%mend range;
%put %range(2910, 2915);
* -> "2910", "2911", "2912", "2913", "2914", "2915"
然后将其分配给一个宏变量并在你的 proc sql
中的语句中使用它%let subset1 = %range(2910, 2915);
proc sql noprint;
create table want as
select *
from
have
where var_want in (&subset1.);
quit;
然后,您可以定义具有不同范围的多个子集变量,并将它们组合在哪里以实现更复杂的子集化。
答案 3 :(得分:0)
对于您想要完整包含的范围,您可以直接使用不等式 - 不输入&#39;必需的,只要你有前导零,其余的你可以使用in
,例如
data example;
length char $1;
do i = 64 to 100;
char = byte(i);
output;
end;
run;
proc sql;
create table want as
select * from example where 'A' <= char <= 'Z' or char in ('[',']');
quit;