<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Thema "Betreff: Kombinationsabfrage einer Diagnose mit mehreren Operationsverfahren" in CoDe SAS German</title>
    <link>https://communities.sas.com/t5/CoDe-SAS-German/Kombinationsabfrage-einer-Diagnose-mit-mehreren/m-p/751920#M2676</link>
    <description>&lt;P&gt;Hallo &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/32733"&gt;@FreelanceReinh&lt;/a&gt;,&lt;/P&gt;&lt;P&gt;vielen Dank für die ausführliche Antwort und die vielen Erklärungen sowie Verbesserungsvorschläge!&lt;/P&gt;&lt;P&gt;Liebe Grüße und einen schönen Abend&lt;/P&gt;</description>
    <pubDate>Sat, 03 Jul 2021 17:12:12 GMT</pubDate>
    <dc:creator>Margaretha_97</dc:creator>
    <dc:date>2021-07-03T17:12:12Z</dc:date>
    <item>
      <title>Kombinationsabfrage einer Diagnose mit mehreren Operationsverfahren</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Kombinationsabfrage-einer-Diagnose-mit-mehreren/m-p/751734#M2674</link>
      <description>&lt;P&gt;Hallo liebe Mitglieder,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;im Rahmen einer Forschungsarbeit programmiere ich mit SAS 9.4 um an bestimmte Daten zu kommen, die ich dann im Anschluss weiter auswerten kann.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Ich zähle dabei die Kombinationen von verschiedenen Diagnosen (ICD-Code, z.B. M84.11) und Prozeduren/Operationen (OPS-Code, z.B. 5782), sodass ich jeweils die Verknüpfung aus jeweils einem ICD- und einem OPS-Code angezeigt bekomme.Die Syntax läuft auch problemlos.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Nun kann es jedoch auch sein, dass ein Patient mit einer bestimmten Diagnose (ICD-Code) mit mehreren verschiedenen Operationen (OPS-Code) behandelt werden kann.&lt;/P&gt;&lt;P&gt;Mögliche Kombinationen wären in meinem Fall beispielseise:&lt;/P&gt;&lt;P&gt;- die Diagnose M84.11 + die Operationen 5-782 + 5-784&lt;/P&gt;&lt;P&gt;- die Diagnose M84.12 + die Operationen 5-782 + 5-784 + 5-785.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Ich habe unter anderem schon gelesen, dass so etwas mit der panel-ID möglich ist. Leider komme ich aber nicht weiter und bin mir sehr unsicher, wie ich diese Kombinationsabfrage programmieren kann.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Meine bisherige Syntax sieht so aus und funktioniert problemlos:&lt;/P&gt;&lt;PRE&gt;/*** Makros f?r Pfade																								  ***/
%let datenpfad	= C:\Users\Margaretha\Desktop\SBA\DRG\Data;
%let outputpfad = C:\Users\Margaretha\Desktop\SBA\DRG\Data;

/*** Makros f?r Datei- und Outputnamen																				  ***/
%let outputname = output20200717; 	


/*** Libname vergeben																								  ***/
libname daten "&amp;amp;datenpfad";  

ods html file = "&amp;amp;outputpfad./&amp;amp;outputname..html";

%macro auswertung (ops, icd, icdsteller);

%do year = 2007 %to 2016; 

*Zusammenfassung der OPS-Codes in einer Variable;
*find(x,y,z) schaut in Variable x nach dem String y an z-ter Position;
*d.h. es werden alle OPS mit '5782' ab der 1.Stelle gefunden, also bspw. auch 57820t;
*OPS_Gesamt nimmt den Wert 1 an, wenn in den Spalten ops_ko der gesuchte Code vorkommt;

data tab_&amp;amp;ops._&amp;amp;icd.; 
set daten.drg&amp;amp;year._3846_sf (keep= icd_hd ops_ko:);
    
	OPS_Gesamt = 0;
  	
	%do i = 1 %to 101; 
	If substr(ops_ko&amp;amp;i,1,4) ="&amp;amp;ops." then OPS_Gesamt = 1;
    %end;

*Filterung der Daten nach der gew?nschten ich_hd;
*ICD_Gesamt nimmt den Wert 1 an, wenn in der Spalte icd_hd der gesuchte Code vorkommt;


	ICD_Gesamt = 0;

	if substr(icd_hd,1,&amp;amp;icdsteller.) = "&amp;amp;icd." then ICD_Gesamt = 1;

*Erstellen einer Tablle, die die Kombination aus gew?nschtem OPS-Code und ICD-Code enth?lt;

proc freq data=tab_&amp;amp;ops._&amp;amp;icd. ;
title "H?ufigkeit nach &amp;amp;icd. und &amp;amp;ops. f?r das Berichtsjahr &amp;amp;year.";
  tables icd_hd;
  where OPS_Gesamt = 1 AND ICD_Gesamt = 1;
run;


%end;
%mend auswertung;
%auswertung (5782, M8411, 5);
%auswertung (5782, M8412, 5);
%auswertung (5782, M8413, 5);
%auswertung (5782, M8414, 5);
%auswertung (5782, M8415, 5);
%auswertung (5782, M8416, 5);
%auswertung (5782, M8417, 5);

%auswertung (5784, M8411, 5);
%auswertung (5784, M8412, 5);
%auswertung (5784, M8413, 5);
%auswertung (5784, M8414, 5);
%auswertung (5784, M8415, 5);
%auswertung (5784, M8416, 5);
%auswertung (5784, M8417, 5);

%auswertung (5785, M8411, 5);
%auswertung (5785, M8412, 5);
%auswertung (5785, M8413, 5);
%auswertung (5785, M8414, 5);
%auswertung (5785, M8415, 5);
%auswertung (5785, M8416, 5);
%auswertung (5785, M8417, 5);

ods html close;&lt;/PRE&gt;&lt;P&gt;Ich hoffe, ich konnte meine Fragestellung verständlich formulieren. Über Anregungen oder Hilfestellungen wäre ich sehr dankbar!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Allen ein schönes Wochenende und liebe Grüße &lt;span class="lia-unicode-emoji" title=":leicht_lächelndes_Gesicht:"&gt;🙂&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 02 Jul 2021 13:40:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Kombinationsabfrage-einer-Diagnose-mit-mehreren/m-p/751734#M2674</guid>
      <dc:creator>Margaretha_97</dc:creator>
      <dc:date>2021-07-02T13:40:03Z</dc:date>
    </item>
    <item>
      <title>Betreff: Kombinationsabfrage einer Diagnose mit mehreren Operationsverfahren</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Kombinationsabfrage-einer-Diagnose-mit-mehreren/m-p/751901#M2675</link>
      <description>&lt;P&gt;Hallo&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/324391"&gt;@Margaretha_97&lt;/a&gt;,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/324391"&gt;@Margaretha_97&lt;/a&gt;&amp;nbsp; schrieb:&lt;BR /&gt;
&lt;PRE&gt;...
	OPS_Gesamt = 0;
  	
	%do i = 1 %to 101; 
	If substr(ops_ko&amp;amp;i,1,4) ="&amp;amp;ops." then OPS_Gesamt = 1;
    %end;
...&lt;/PRE&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Der obige Abschnitt des bestehenden Makros könnte u. U. wie folgt vereinfacht werden:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;array ops_ko[101];
OPS_Gesamt = ("&amp;amp;ops." in: ops_ko);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Dadurch würden die Initialisierung von &lt;FONT face="courier new,courier"&gt;OPS_Gesamt&lt;/FONT&gt; und 101 IF-THEN-Statements im generierten Datastep-Code durch eine einzige Zuweisung und eine Array-Deklaration ersetzt. Voraussetzung ist, dass die definierte Länge der Variablen &lt;FONT face="courier new,courier"&gt;ops_ko1-ops_ko101&lt;/FONT&gt; mindestens so groß ist wie die Länge der zu suchenden Strings &lt;FONT face="courier new,courier"&gt;"&amp;amp;ops."&lt;/FONT&gt;. (EDIT: Ferner darf es keine Variable &lt;FONT face="courier new,courier"&gt;ops_ko&lt;/FONT&gt; ohne Nummer im Input-Dataset geben; ggf. einfach das Array anders nennen.) Da die 101 Variablen vermutlich alle gleich lang definiert sind und man keinen längeren String in kürzeren Variablen suchen wird, dürfte das gegeben sein. Der Operator &lt;FONT face="courier new,courier"&gt;IN:&lt;/FONT&gt; prüft dann, ob mindestens eines der Array-Elemente mit der angegebenen Zeichenfolge beginnt. Wenn ja, wird &lt;FONT face="courier new,courier"&gt;OPS_Gesamt&lt;/FONT&gt; auf 1 gesetzt, sonst auf 0.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Ausgehend von dieser Vereinfachung können wir die Bedingung so erweitern, dass die Makrovariable &lt;FONT face="courier new,courier"&gt;ops&lt;/FONT&gt; auch eine ganze Liste von OPS-Codes enthalten darf, getrennt etwa durch Leerzeichen, und dass jedes Element der Liste am Anfang mindestens einer der 101 Variablen des Arrays gefunden werden muss (wenn das der Inhalt der "&lt;SPAN&gt;Kombinationsabfrage" sein soll)&lt;/SPAN&gt;&lt;FONT face="helvetica"&gt;:&lt;/FONT&gt;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;OPS_Gesamt = 1
%do i=1 %to %sysfunc(countw(&amp;amp;ops,%str( )));
  &amp;amp; "%scan(&amp;amp;ops,&amp;amp;i,%str( ))" in: ops_ko
%end;
;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Die %DO-Schleife durchläuft alle durch Leerzeichen begrenzten "Wörter" in &lt;FONT face="courier new,courier"&gt;&amp;amp;ops&lt;/FONT&gt; und erzeugt für jedes "Wort", also jeden OPS-Code, eine mit UND verknüpfte Bedingung wie oben. Der UND-Operator (&lt;FONT face="courier new,courier"&gt;&amp;amp;&lt;/FONT&gt;) ist wegen der vorangestellten 1 (=WAHR) auch am Anfang korrekt. Das Semikolon ganz unten schließt die Zuweisung im Datastep ab. Der Code funktioniert auch mit einem einzelnen OPS-Code in &lt;FONT face="courier new,courier"&gt;&amp;amp;ops&lt;/FONT&gt;&amp;nbsp;wie zuvor.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Es ist gute Praxis (um mögliche Namenskonflikte zu vermeiden), die Laufvariable &lt;FONT face="courier new,courier"&gt;i&lt;/FONT&gt; als lokal zu deklarieren, also weiter oben im Makro die Zeile&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%local i;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;einzufügen (oder auch gleich&amp;nbsp;&lt;FONT face="courier new,courier"&gt;%local i year;&lt;/FONT&gt;).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Problematisch ist nur die Verwendung von &lt;FONT face="courier new,courier"&gt;&amp;amp;ops&lt;/FONT&gt; im Dataset-Namen&amp;nbsp;&lt;FONT face="courier new,courier"&gt;tab_&amp;amp;ops._&amp;amp;icd.&lt;/FONT&gt;, denn darin dürfen keine Leerzeichen vorkommen und bei langen OPS-Code-Listen könnte zudem die maximale Länge (32) von Dataset-Namen überschritten werden (auch bei Verwendung von Unterstrichen statt Leerzeichen als Trennzeichen). Ich würde die Komponente &lt;FONT face="courier new,courier"&gt;&amp;amp;ops.&lt;/FONT&gt;&amp;nbsp;daher möglichst aus dem Namen herauslassen. Die Datasets scheinen ja sowieso nur temporär für die Auswertung mit PROC FREQ angelegt zu werden. Insbesondere werden die Datasets für 2007 bis 2015 jeweils durch das Dataset des Folgejahres überschrieben.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Die Makro-Aufrufe könnten dann etwa so aussehen:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%auswertung (5782 5784, M8411, 5)
%auswertung (5782 5784 5785, M8412, 5)
%auswertung (5785, M8417, 5)&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 03 Jul 2021 12:57:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Kombinationsabfrage-einer-Diagnose-mit-mehreren/m-p/751901#M2675</guid>
      <dc:creator>FreelanceReinh</dc:creator>
      <dc:date>2021-07-03T12:57:02Z</dc:date>
    </item>
    <item>
      <title>Betreff: Kombinationsabfrage einer Diagnose mit mehreren Operationsverfahren</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Kombinationsabfrage-einer-Diagnose-mit-mehreren/m-p/751920#M2676</link>
      <description>&lt;P&gt;Hallo &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/32733"&gt;@FreelanceReinh&lt;/a&gt;,&lt;/P&gt;&lt;P&gt;vielen Dank für die ausführliche Antwort und die vielen Erklärungen sowie Verbesserungsvorschläge!&lt;/P&gt;&lt;P&gt;Liebe Grüße und einen schönen Abend&lt;/P&gt;</description>
      <pubDate>Sat, 03 Jul 2021 17:12:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Kombinationsabfrage-einer-Diagnose-mit-mehreren/m-p/751920#M2676</guid>
      <dc:creator>Margaretha_97</dc:creator>
      <dc:date>2021-07-03T17:12:12Z</dc:date>
    </item>
  </channel>
</rss>

