Zastanawiam się, czy istnieje sposób na zapytanie w SAS, aby wybrać podgrupę, tak jak Wybierz opcję Postgres

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

Jest też sposób, aby określić zakresy zamiast rzeczywistej wartości, np.: Między 2910-2915

Kody diagnozowe to znaki nie numeryczne. Używam edycji Uniwersytetu SAS.

0
sac 8 luty 2018, 08:49

3 odpowiedzi

Jeśli jest to postać, której nie możesz użyć zasięgu. Ale możesz użyć oświadczenia in

SELECT  * FROM    s.diagnoses WHERE   icd9code in    ('2910','2911','2912');
0
Raunak Thomas 8 luty 2018, 05:54

Aby wybrać zakres. Możesz zdefiniować własne makro, aby wygenerować łańcuchy takie jak ten

%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"

Następnie przypisz go do zmiennej makra i użyj go w Tobie, gdzie oświadczenie w Proc SQL

%let subset1 = %range(2910, 2915);
proc sql noprint;
    create table want as
    select *
    from 
    have
    where var_want in (&subset1.);
quit;

Następnie możesz zdefiniować wiele zmiennych podzbiorów z różnymi zakresami i kombinacją je w miejscu, w którym można osiągnąć bardziej złożone podzbiorowe.

0
englealuze 8 luty 2018, 08:44

W przypadku zakresów chcesz uwzględnić w całości, możesz użyć bezpośrednio nierówności - Nie wymaga "Wejścia", o ile masz prowadzące zera, a dla reszty można użyć in, np.

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;
0
user667489 8 luty 2018, 10:32