BookmarkSubscribeRSS Feed
XFranziska
Calcite | Level 5

Hallo, 
Ich möchte gerne aus meinem Datensatz mit vielen Patienten, die Patienten herausgreifen, die mindestens einmal aza_absetzenjemals=1 haben. Wenn dies mindestens einmal erfolgt ist, sollen alle Einträge mit dieser pati_id in eine neue Liste die Ausgangsgruppe übernommen werden. 
Die pati_id sind zudem nach der Anzahl besuche aufsteigend sortiert. 
Ich habe bisher diesen Code geschrieben, allerdings erhalte ich dann in Ergebnis eine Liste, in der die Werte unterhalb des ersten Falles von aza_absetzenjemals=1 immer 1 anzeigen. Überhalb jedoch bleibt der Wert auf 0. 

 

data TG1_Help;
    set TG1;
    by pati_id;
    retain aza_absetzenjemals;
lag_pati_id = lag(pati_id);
lag_aza_absetzenjemals=lag(aza_absetzenjemals);
    
    * Initialisiere die Liste für pati_ids;
    if _N_ = 1 then do;
        declare hash pati_ids();
        pati_ids.defineKey('pati_id');
        pati_ids.defineDone();
    end;
 
put pati_id visit aza_absetzenjemals;
if aza_absetzenjemals = 1 then do;
        do index = _N_-1 to 1 by -1 while(pati_id=lag_pati_id and lag_aza_absetzenjemals ne 1);
put pati_id visit index lag_pati_id aza_absetzenjemals lag_aza_absetzenjemals;
aza_absetzenjemals=1;
put pati_id visit index lag_pati_id aza_absetzenjemals lag_aza_absetzenjemals;
*output;
put pati_id visit index lag_pati_id aza_absetzenjemals lag_aza_absetzenjemals;
set TG1 point=index;
        end;
 
    end;
    else do;
 
put pati_id visit index lag_pati_id aza_absetzenjemals lag_aza_absetzenjemals;
aza_absetzenjemals=0;
put pati_id visit index lag_pati_id aza_absetzenjemals lag_aza_absetzenjemals;
*output;
end;
output;
run;
 
proc print data=TG1_Help;
   var pati_id visit aza_absetzenjemals;
run;


Ich bin über jede Hilfe dankbar!
Liebe Grüße Franzi

1 REPLY 1
Patrick
Opal | Level 21

Das folgende program erstellt zunächst eine Hash-Tabelle und lädt sie mit allen Patienten-IDs, die mindestens einen Fall (eine Zeile) mit aza_absetzenjemals=1 haben. Anschließend wählt die Logik alle Zeilen aus TG1 aus, die eine übereinstimmende patient_id in der Hash-Tabelle haben.

data TG1_Help;
  * Initialisiere die Liste für pati_ids;
  if _N_ = 1 then
    do;
      /* Hash liste mit pati_id's die mindestens einmal aza_absetzenjemals=1 haben */
      declare hash pati_ids(dataset:'TG1(where=(aza_absetzenjemals=1 ))');
      pati_ids.defineKey('pati_id');
      pati_ids.defineDone();
    end;

  set TG1;

  if pati_ids()=0 then output;

run;

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 1 reply
  • 458 views
  • 0 likes
  • 2 in conversation