<?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: Erster Datensatz einer Tabelle bei mehreren Tabellen im SET-Statement" in CoDe SAS German</title>
    <link>https://communities.sas.com/t5/CoDe-SAS-German/Erster-Datensatz-einer-Tabelle-bei-mehreren-Tabellen-im-SET/m-p/327667#M2182</link>
    <description>&lt;P&gt;Hallo Michael,&lt;/P&gt;
&lt;P&gt;mit einem Retain-Statement kann man sich den Status merken und dann auswerten:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Data getwant;
  retain _b 1;
  set get (in=a ) want (in=b);
  if b then do;
    if _b then do;
      _b = 0;
      put "Erster Datensatz Tabelle Want " _N_=;
    end;
  end;
  drop _b;
run;&lt;BR /&gt;&lt;BR /&gt;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;/* EDIT */
/* oder noch besser */

Data getwant;
  set get want indsname=Datei curobs=N_Dat;
  if N_Dat=1 then put _N_ ": Erster Datensatz von Tabelle " Datei;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Viele Grüße&lt;/P&gt;
&lt;P&gt;Jan&lt;/P&gt;</description>
    <pubDate>Thu, 26 Jan 2017 10:58:38 GMT</pubDate>
    <dc:creator>jh_ti_bw</dc:creator>
    <dc:date>2017-01-26T10:58:38Z</dc:date>
    <item>
      <title>Erster Datensatz einer Tabelle bei mehreren Tabellen im SET-Statement</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Erster-Datensatz-einer-Tabelle-bei-mehreren-Tabellen-im-SET/m-p/327657#M2181</link>
      <description>&lt;P&gt;Hallo zusammen,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ich suche eine möglichst elegante und einfache Möglichkeit bei einem SET-Statement mit mehreren Tabellen herauszufinden, ob der aktuelle Datensatz der erste Datensatz einer Tabelle ist.&lt;/P&gt;
&lt;P&gt;Wahlweise auch gerne, ob der Satz der letzte Satz in einer Tabelle ist.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Beispiel:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data a;
input var_a;
datalines;
1
2
;
run;

data b;
input var_b;
datalines;
1
2
;
run;


data c;
 set a (in = aa) end=eofa
     b (in = bb);
  var_c = eofa;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Das end=eofa im Beispiel sollte sich idealerweise auf das Ende der Tabelle a beziehen und nicht auf das komplette Ende aller Sätze im SET-Statement anzeigen.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Hier das Ergebnis des oberen Codes (get) und was ich gerne hätte (want):&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data get;
input var_a var_b var_c;
datalines;
1 . 0
2 . 0
. 1 0
. 2 1
;
run;

data want;
input var_a var_b var_c;
datalines;
1 . 0
2 . 1
. 1 0
. 2 0
;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Folgender Code mit zwei SET-Statements ermöglicht mir zwar die gewünschte Verarbeitung, aber das macht aus meiner Sicht den Code sehr unübersichtlich.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data c;
 set a (in = aa) end=eofa;
 var_c = eofa;
 output;
 call missing (var_a, var_c);
  
 if eofa then do until (eofb);
               set b (in = bb) end=eofb;
               output;
              end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Da wären zwei Data-Steps und ein anschließendes Zusammenführen wahrscheinlich sinnvoller.&lt;/P&gt;
&lt;P&gt;Mir geht es jedoch auch um den Lerneffekt: Kann ich das mit SAS in einem Schritt lösen?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Viele Grüße&lt;/P&gt;
&lt;P&gt;Michael&lt;/P&gt;</description>
      <pubDate>Thu, 26 Jan 2017 09:17:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Erster-Datensatz-einer-Tabelle-bei-mehreren-Tabellen-im-SET/m-p/327657#M2181</guid>
      <dc:creator>mfab</dc:creator>
      <dc:date>2017-01-26T09:17:42Z</dc:date>
    </item>
    <item>
      <title>Betreff: Erster Datensatz einer Tabelle bei mehreren Tabellen im SET-Statement</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Erster-Datensatz-einer-Tabelle-bei-mehreren-Tabellen-im-SET/m-p/327667#M2182</link>
      <description>&lt;P&gt;Hallo Michael,&lt;/P&gt;
&lt;P&gt;mit einem Retain-Statement kann man sich den Status merken und dann auswerten:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Data getwant;
  retain _b 1;
  set get (in=a ) want (in=b);
  if b then do;
    if _b then do;
      _b = 0;
      put "Erster Datensatz Tabelle Want " _N_=;
    end;
  end;
  drop _b;
run;&lt;BR /&gt;&lt;BR /&gt;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;/* EDIT */
/* oder noch besser */

Data getwant;
  set get want indsname=Datei curobs=N_Dat;
  if N_Dat=1 then put _N_ ": Erster Datensatz von Tabelle " Datei;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Viele Grüße&lt;/P&gt;
&lt;P&gt;Jan&lt;/P&gt;</description>
      <pubDate>Thu, 26 Jan 2017 10:58:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Erster-Datensatz-einer-Tabelle-bei-mehreren-Tabellen-im-SET/m-p/327667#M2182</guid>
      <dc:creator>jh_ti_bw</dc:creator>
      <dc:date>2017-01-26T10:58:38Z</dc:date>
    </item>
    <item>
      <title>Betreff: Erster Datensatz einer Tabelle bei mehreren Tabellen im SET-Statement</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Erster-Datensatz-einer-Tabelle-bei-mehreren-Tabellen-im-SET/m-p/327670#M2183</link>
      <description>&lt;P&gt;Hi Jan,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;super Idee, vielen Dank.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Mir kam beim zweiten Nachdenken auch noch eine Lösung (passend zu meinem Beispiel oben):&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data d;
 if 0 = 1 then set a nobs=nobsa;
 set a b;
 if _n_ = nobsa+1 then var_c = 1; else var_c = 0;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Die Bedingung (erster Satz der zweiten Tabelle) ist ja erfüllt, wenn _n_ gleich Anzahl Sätze erste Tabelle plus 1 ist.&lt;/P&gt;
&lt;P&gt;Somit ermittle ich in Zeile 1 die Anzahl Sätze der ersten Tabelle und vergleiche dann in Zeile 3.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Hier die generelle Variante:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data result;
 if 0 = 1 then set have1 nobs=nobs_have1;
 set have1 have2;
 if _n_ = nobs_have1+1 then
   start_have2 = 1;
 else start_have2 = 0;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Vielen Dank für die Unterstützung &lt;span class="lia-unicode-emoji" title=":leicht_lächelndes_Gesicht:"&gt;🙂&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Beste Grüße&lt;/P&gt;
&lt;P&gt;Michael&lt;/P&gt;</description>
      <pubDate>Thu, 26 Jan 2017 10:52:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Erster-Datensatz-einer-Tabelle-bei-mehreren-Tabellen-im-SET/m-p/327670#M2183</guid>
      <dc:creator>mfab</dc:creator>
      <dc:date>2017-01-26T10:52:48Z</dc:date>
    </item>
    <item>
      <title>Betreff: Erster Datensatz einer Tabelle bei mehreren Tabellen im SET-Statement</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Erster-Datensatz-einer-Tabelle-bei-mehreren-Tabellen-im-SET/m-p/327719#M2185</link>
      <description>&lt;P&gt;Hallo Michael,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;hier noch eine etwas "einfachere" Variante.&lt;/P&gt;
&lt;P&gt;Es gibt die Möglichkeit im SET-Stement über die Option indsname= eine DataStep interne Variable mit dem Namen der jeweiligen Input-Tabelle zu erzeugen. Wenn der sich ändert, hat sich auch die Input-Tabelle geändert und das ist die Stelle, an der Du eine 1 in der boolschen Variable haben möchtest.&lt;/P&gt;
&lt;P&gt;Im Beispiel wird in der Variable curTable gespeichert, welche Tabelle gerade dran ist, sie ist zunächst leer, über RETAIN wird der Wert über gelesene Records erhalten. Die boolsche Variable firstRecordRead wird auf 0 gesetzt. Im SET-Statement wird der Name der aktuellen Input-Tabelle in curName gespeichert. Anschließend kommt der Vergleich: Wenn curTable nicht curName entspricht (das ist bei der ersten Iteration der Fall weil curTable missing ist, dann bei jedem Wechsel der Input-Tabelle) wird firstRecordRead auf 1 gesetzt und der Name der aktuellen Input-Tabelle in curTable gespeichert.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Data c;
  Length curTable $41 firstRecordRead 8;
  Retain curTable;
  firstRecordRead = 0;
  Set a b indsname=curName;
  If ( curTable Ne curName ) Then Do;
    firstRecordRead = 1;
    curTable = curName;
  End;
  *Drop curTable;
Run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Viele Grüße,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; Grischa&lt;/P&gt;</description>
      <pubDate>Thu, 26 Jan 2017 13:40:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Erster-Datensatz-einer-Tabelle-bei-mehreren-Tabellen-im-SET/m-p/327719#M2185</guid>
      <dc:creator>GrischaPfister</dc:creator>
      <dc:date>2017-01-26T13:40:27Z</dc:date>
    </item>
    <item>
      <title>Betreff: Erster Datensatz einer Tabelle bei mehreren Tabellen im SET-Statement</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Erster-Datensatz-einer-Tabelle-bei-mehreren-Tabellen-im-SET/m-p/327739#M2187</link>
      <description>&lt;P&gt;Vielen Dank!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Schön zu sehen, wie viele Möglichkeiten es gibt und wie ideenreich die Community ist &lt;span class="lia-unicode-emoji" title=":zwinkerndes_Gesicht:"&gt;😉&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Ich denke, die Variante mit curobs, ggf. in Kombination mit indsname sagt mir persönlich&amp;nbsp;am Meisten zu.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Beste Grüße in die Runde!&lt;/P&gt;
&lt;P&gt;Michael&lt;/P&gt;</description>
      <pubDate>Thu, 26 Jan 2017 15:29:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Erster-Datensatz-einer-Tabelle-bei-mehreren-Tabellen-im-SET/m-p/327739#M2187</guid>
      <dc:creator>mfab</dc:creator>
      <dc:date>2017-01-26T15:29:55Z</dc:date>
    </item>
  </channel>
</rss>

