SAS Subquerying人口

时间:2018-02-08 05:49:06

标签: postgresql sas

我想知道是否有办法在SAS中查询选择子组,就像Postgres中的select选项一样

SELECT  * 
FROM    s.diagnoses 
WHERE   icd9code = ANY    ('{2910,2911,2912,2913,2914,2915,3456,3457,3458}');  

还有办法指定范围而不是实际值,例如:介于2910-2915之间

诊断代码是非数字字符。我正在使用SAS大学版。

4 个答案:

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