<?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: Spiegel Online Rätsel als SAS Code Kata" in CoDe SAS German</title>
    <link>https://communities.sas.com/t5/CoDe-SAS-German/Spiegel-Online-R%C3%A4tsel-als-SAS-Code-Kata/m-p/574920#M2552</link>
    <description>&lt;P&gt;Die Übung eignet sich wirklich gut für den Einstieg in Programmierung (mit SAS)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Ein Praktikant in unserer Abteilung hatte den interessanten Ansatz, die Schliessfächer nicht waagerecht zu speichern, sondern senkrecht, also ein Schliessfach entspricht einer Zeile in einer SAS-Tabelle.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Das wollte ich dann mal ausprobieren und habe folgende Lösung erstellt, bei der für jeden Durchgang eine neue Spalte angefügt wird.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro reportOpenLockers(ANZAHL=,AUF=,ZU=);
data SCHLIESSFAECHER;
  do SCHLIESSFACH=1 to &amp;amp;ANZAHL;
    DURCHGANG0 = "&amp;amp;AUF."; 
    output;
  end;
run;

%do I=1 %to &amp;amp;ANZAHL;
%let J=%sysfunc(sum(&amp;amp;I,-1));
data SCHLIESSFAECHER;
  set SCHLIESSFAECHER;
  DURCHGANG&amp;amp;I. = DURCHGANG&amp;amp;J.;
  if mod(_n_,&amp;amp;I)= 0 then do;
    if DURCHGANG&amp;amp;J. = "&amp;amp;AUF." then
      DURCHGANG&amp;amp;I. = "&amp;amp;ZU";
    else 
      DURCHGANG&amp;amp;I. = "&amp;amp;AUF.";
  end;
run;
%end;

%mend reportOpenLockers;
%reportOpenLockers(ANZAHL=100,AUF=auf,ZU=zu);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Dann wollte ich noch ändern, dass es nur eine Spalte gibt, die den aktuellen Zustand enthält. Diese Spalte wird also bei jedem Durchgang überschrieben.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro reportOpenLockers(ANZAHL=,AUF=,ZU=);
data SCHLIESSFAECHER;
  do SCHLIESSFACH=1 to &amp;amp;ANZAHL;
    DURCHGANG = "&amp;amp;AUF."; 
    output;
  end;
run;

%do I=1 %to &amp;amp;ANZAHL;
data SCHLIESSFAECHER;
  set SCHLIESSFAECHER;
    if mod(_n_,&amp;amp;I)= 0 then do;
      if DURCHGANG = "&amp;amp;AUF." then
        DURCHGANG = "&amp;amp;ZU";
      else 
        DURCHGANG = "&amp;amp;AUF.";
    end;
run;
%end;

%mend reportOpenLockers;
%reportOpenLockers(ANZAHL=100,AUF=auf,ZU=zu);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Schönes Wochenende allerseits!&lt;/P&gt;</description>
    <pubDate>Fri, 19 Jul 2019 12:15:14 GMT</pubDate>
    <dc:creator>CKothenschulte</dc:creator>
    <dc:date>2019-07-19T12:15:14Z</dc:date>
    <item>
      <title>Spiegel Online Rätsel als SAS Code Kata</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Spiegel-Online-R%C3%A4tsel-als-SAS-Code-Kata/m-p/200106#M96</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hallo zusammen,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;zur Abwechslung einmal eine kleine Aufgabe an alle CoDe SAS Mitglieder.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Auf Spiegel Online fand ich ein spannendes Rätsel unter: &lt;A href="http://www.spiegel.de/wissenschaft/mensch/raetsel-der-woche-wie-viele-schliessfaecher-stehen-offen-a-1041982.html" title="http://www.spiegel.de/wissenschaft/mensch/raetsel-der-woche-wie-viele-schliessfaecher-stehen-offen-a-1041982.html"&gt;http://www.spiegel.de/wissenschaft/mensch/raetsel-der-woche-wie-viele-schliessfaecher-stehen-offen-a-1041982.html&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Dort wurde eine mathematische Lösung vorgestellt, aber es wäre durchaus auch eine algorithmische Lösung des Problems denkbar.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ich würde daher das Problem als kleine &lt;A href="https://de.wikipedia.org/wiki/Kata_%28Programmierung%29"&gt;Code Kata&lt;/A&gt; für alle interessierten SAS Programmierer vorschlagen. Hierbei handelt es sich um eine kleine Übungsaufgabe, um neue Techniken oder Programmiermethoden auszuprobieren und zu üben.&lt;/P&gt;&lt;P&gt;Aus eigener Erfahrung kann ich bestätigen, dass man bereits durch eine kleine Code Kata schon einige interessante Einsichten gewinnen kann. Den größten Vorteil kann man jedoch aus einer Code Kata ziehen, wenn man seine Ergebnisse mit anderen Anwendern austauscht.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mein Vorschlag wäre daher ein SAS Makro zu erstellen, dass die Anzahl der offenen Schließfächer und die Nummern der geöffneten Fächer als Bericht erzeugt.&lt;/P&gt;&lt;P&gt;Die Anzahl der Schließfächer soll per Parameter konfigurierbar sein.&lt;/P&gt;&lt;P&gt;Somit ergibt sich die folgende Makrosignatur:&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;STRONG&gt;&lt;SPAN lang="EN-US" style="font-size: 12.0pt; font-family: 'Courier New'; color: navy; background: white;"&gt;%macro&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN lang="EN-US" style="font-size: 12.0pt; font-family: 'Courier New'; color: black; background: white;"&gt; reportOpenLockers(countOfLockerDoors);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&amp;nbsp; &lt;SPAN lang="EN-US" style="font-size: 12.0pt; font-family: 'Courier New'; color: green; background: white;"&gt;/* ... */&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;STRONG&gt;&lt;SPAN lang="EN-US" style="font-size: 12.0pt; font-family: 'Courier New'; color: navy; background: white;"&gt;%mend&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN lang="EN-US" style="font-size: 12.0pt; font-family: 'Courier New'; color: black; background: white;"&gt; reportOpenLockers;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;Aufgerufen werden kann das Makro dann beispielsweise für 100 Schließfächern so:&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12.0pt; font-family: 'Courier New'; color: black; background: white;"&gt;%&lt;STRONG&gt;&lt;EM&gt;reportOpenLockers&lt;/EM&gt;&lt;/STRONG&gt;(&lt;/SPAN&gt;&lt;STRONG style="color: teal; background: white; font-size: 12.0pt; font-family: 'Courier New';"&gt;100&lt;/STRONG&gt;&lt;SPAN style="font-size: 12.0pt; font-family: 'Courier New'; color: black; background: white;"&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Sie können sich für diese Aufgabe selbst ein Ziel setzen und beispielsweise das Makro besonders elegant und lesbar implementieren oder die Businesslogik in unterschiedlichen SAS Technologien wie Arrays, Hashtables oder PROC DS2 umzusetzen.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ich werde dieses Makro selbst implementieren und nächsten Freitag (17.7.) an dieser Stelle meine Lösung vorstellen.&lt;/P&gt;&lt;P&gt;Alle interessierten Programmierer können aber ebenso hier ihre Lösung vorstellen und diskutieren.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ich bin auf die Ergebnisse und Dikussionen gespannt.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Viele Grüße,&lt;/P&gt;&lt;P&gt;Andreas Menrath&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Jul 2015 13:33:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Spiegel-Online-R%C3%A4tsel-als-SAS-Code-Kata/m-p/200106#M96</guid>
      <dc:creator>AndreasMenrath</dc:creator>
      <dc:date>2015-07-10T13:33:10Z</dc:date>
    </item>
    <item>
      <title>Re: Spiegel Online Rätsel als SAS Code Kata</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Spiegel-Online-R%C3%A4tsel-als-SAS-Code-Kata/m-p/200107#M97</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hallo Herr Menrath,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;sehr gute Idee mit dem Rätsel!&lt;/P&gt;&lt;P&gt;Anbei meine Lösung mit einem Data-Step. Ein Report kommt nicht heraus.&lt;/P&gt;&lt;P&gt;Die zum Schluss geöffneten Schließfächer werden ins Log ausgegeben.&lt;/P&gt;&lt;P&gt;Der Stand nach jedem "Rundgang" wird in einer Tabelle gespeichert und kann von dort aus ausgegeben werden.&lt;/P&gt;&lt;P&gt;Entschieden habe ich mich für die Speicherung des Zustands in einer(!) alphanumerischen Variablen, um den Befehl (und nicht die Funktion) substr nutzen zu können.&lt;/P&gt;&lt;P&gt;Die Umsetzung hat Spaß gemacht. Ich konnte mal wieder sehen, wie schnell und kurz man Fragestellungen in SAS in einem einzigen Data-Step lösen kann.&lt;/P&gt;&lt;P&gt;Sicherlich kann man das Makro noch schöner, ausführlicher und abgesicherter umsetzen...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Schönen Abend! &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000080; font-size: 10pt; font-family: 'Courier New', monospace;"&gt;&lt;STRONG style="background: #ffffff;"&gt;%macro&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt; reportOpenLockers(countOfLockerDoors,zu=X,auf=O);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace;"&gt;data SCHLIESSFACH (drop=i j);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; attrib SCHLIESSFACH format=$&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="color: #008080; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;countOfLockerDoors.&lt;/SPAN&gt;&lt;SPAN style="color: #008080; font-size: 10pt; font-family: 'Courier New', monospace;"&gt;&lt;STRONG style="background: #ffffff;"&gt;.&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #008000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;/* Schleife i: Rundgänge des Hausmeisters */&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=&lt;/SPAN&gt;&lt;SPAN style="color: #008080; font-size: 10pt; font-family: 'Courier New', monospace;"&gt;&lt;STRONG style="background: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt; to &amp;amp;&lt;/SPAN&gt;&lt;SPAN style="color: #008080; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;countOfLockerDoors.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #008000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;/* Schleife j: Je Rundgang alle Schließfächer */&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do j=i by i to &amp;amp;&lt;/SPAN&gt;&lt;SPAN style="color: #008080; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;countOfLockerDoors.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if mod(j,i)=&lt;/SPAN&gt;&lt;SPAN style="color: #008080; font-size: 10pt; font-family: 'Courier New', monospace;"&gt;&lt;STRONG style="background: #ffffff;"&gt;0&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt; then&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #008000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;/* jedes i-te Schließfach ändern... */&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #008000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;/* ...wenn zu (oder beim 1. Mal unbekannt) dann auf */&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if substr(SCHLIESSFACH,j,&lt;/SPAN&gt;&lt;SPAN style="color: #008080; font-size: 10pt; font-family: 'Courier New', monospace;"&gt;&lt;STRONG style="background: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;) in (&lt;/SPAN&gt;&lt;SPAN style="color: #800080; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;' '&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;,&lt;/SPAN&gt;&lt;SPAN style="color: #800080; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;"&amp;amp;ZU."&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;) then do;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; substr(SCHLIESSFACH,j,&lt;/SPAN&gt;&lt;SPAN style="color: #008080; font-size: 10pt; font-family: 'Courier New', monospace;"&gt;&lt;STRONG style="background: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;) = &lt;/SPAN&gt;&lt;SPAN style="color: #800080; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;"&amp;amp;AUF."&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-weight: normal;"&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-weight: normal;"&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else do;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #008000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;/* ...wenn auf dann zu */&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; substr(SCHLIESSFACH,j,&lt;/SPAN&gt;&lt;SPAN style="color: #008080; font-size: 10pt; font-family: 'Courier New', monospace;"&gt;&lt;STRONG style="background: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;) = &lt;/SPAN&gt;&lt;SPAN style="color: #800080; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;"&amp;amp;ZU."&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-weight: normal;"&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end; &lt;/SPAN&gt;&lt;SPAN style="color: #008000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;/* Ende Schleife j */&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #008000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;/* Ausgabe des aktuellen Stands in die Tabelle */&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-weight: normal;"&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end; &lt;/SPAN&gt;&lt;SPAN style="color: #008000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;/* Ende Schleife i */&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #008000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;/* Ausgabe der noch offenen Schließfächer ins Log */&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=&lt;/SPAN&gt;&lt;SPAN style="color: #008080; font-size: 10pt; font-family: 'Courier New', monospace;"&gt;&lt;STRONG style="background: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt; to &amp;amp;&lt;/SPAN&gt;&lt;SPAN style="color: #008080; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;countOfLockerDoors.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if substr(SCHLIESSFACH,i,&lt;/SPAN&gt;&lt;SPAN style="color: #008080; font-size: 10pt; font-family: 'Courier New', monospace;"&gt;&lt;STRONG style="background: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;) in (&lt;/SPAN&gt;&lt;SPAN style="color: #800080; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;"&amp;amp;AUF."&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;) then do;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-weight: normal;"&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put i=;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-weight: normal;"&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-weight: normal;"&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-weight: normal;"&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace;"&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-weight: normal;"&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace;"&gt;&lt;BR /&gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000080; font-size: 10pt; font-family: 'Courier New', monospace;"&gt;&lt;STRONG style="background: #ffffff;"&gt;%mend&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt; reportOpenLockers;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;%&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; font-family: 'Courier New', monospace;"&gt;&lt;EM&gt;&lt;STRONG style="background: #ffffff;"&gt;reportOpenLockers&lt;/STRONG&gt;&lt;/EM&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; font-style: normal; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: #008080; font-size: 10pt; font-style: normal; font-family: 'Courier New', monospace;"&gt;&lt;STRONG style="background: #ffffff;"&gt;100&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; font-size: 10pt; font-style: normal; background: #ffffff; font-family: 'Courier New', monospace; font-weight: normal;"&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 13 Jul 2015 16:22:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Spiegel-Online-R%C3%A4tsel-als-SAS-Code-Kata/m-p/200107#M97</guid>
      <dc:creator>CKothenschulte</dc:creator>
      <dc:date>2015-07-13T16:22:25Z</dc:date>
    </item>
    <item>
      <title>Re: Spiegel Online Rätsel als SAS Code Kata</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Spiegel-Online-R%C3%A4tsel-als-SAS-Code-Kata/m-p/200108#M98</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hallo,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;auch ich habe das gerade eben mal ausprobiert, weil ich recht neu in SAS bin. Ist auf jeden Fall eine gute Übung. Hat Spass gemacht.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*1 ist offen;&lt;/P&gt;&lt;P&gt;*0 ist geschlossen;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro ReportOpenLockers(count);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data tueren (drop=i j);&lt;/P&gt;&lt;P&gt;array lockers[&amp;amp;count.] ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*alle array variablen auf eins setzen;&lt;/P&gt;&lt;P&gt;do i=1 to &amp;amp;count.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; lockers&lt;I&gt; = 1;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*zwei Scheifen durchlaufen;&lt;/P&gt;&lt;P&gt;do j=2 to &amp;amp;count.;&lt;/P&gt;&lt;P&gt;do i=j to &amp;amp;count. by j;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if lockers&lt;I&gt; = 1 then lockers&lt;I&gt; = 0;&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; else if lockers&lt;I&gt; = 0 then lockers&lt;I&gt; = 1;&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc transpose data=tueren out=tueren;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc print data=tueren;&lt;/P&gt;&lt;P&gt;&amp;nbsp; where Col1 = 1;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%mend ReportOpenLockers;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%ReportOpenLockers(100);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Viele Grüße&lt;/P&gt;&lt;P&gt;Sven&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 14 Jul 2015 08:59:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Spiegel-Online-R%C3%A4tsel-als-SAS-Code-Kata/m-p/200108#M98</guid>
      <dc:creator>Sven_</dc:creator>
      <dc:date>2015-07-14T08:59:57Z</dc:date>
    </item>
    <item>
      <title>Re: Spiegel Online Rätsel als SAS Code Kata</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Spiegel-Online-R%C3%A4tsel-als-SAS-Code-Kata/m-p/200109#M99</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hallo zusammen,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;wie versprochen möchte ich auch meine Lösung vorstellen:&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;STRONG&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: navy; background: white none repeat scroll 0% 0%;"&gt;%macro&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt; reportOpenLockers(countOfLockerDoors);&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc format;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value open &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: teal; background: white none repeat scroll 0% 0%;"&gt;0&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt; = &lt;/SPAN&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: purple; background: white none repeat scroll 0% 0%;"&gt;"closed"&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: teal; background: white none repeat scroll 0% 0%;"&gt;1&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt; = &lt;/SPAN&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: purple; background: white none repeat scroll 0% 0%;"&gt;"open"&lt;/SPAN&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data lockerinfo;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: green; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* initialize */&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; length lockerNumber status i &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: teal; background: white none repeat scroll 0% 0%;"&gt;8&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; format status &lt;/SPAN&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: teal; background: white none repeat scroll 0% 0%;"&gt;open.&lt;/SPAN&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array lockerDoor {&amp;amp;&lt;/SPAN&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: teal; background: white none repeat scroll 0% 0%;"&gt;countOfLockerDoors.&lt;/SPAN&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;} (&amp;amp;&lt;/SPAN&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: teal; background: white none repeat scroll 0% 0%;"&gt;countOfLockerDoors.&lt;/SPAN&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt; * &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: teal; background: white none repeat scroll 0% 0%;"&gt;0&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;) ;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: green; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* business logic to calculate locker status */&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i = &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: teal; background: white none repeat scroll 0% 0%;"&gt;1&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt; to &amp;amp;&lt;/SPAN&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: teal; background: white none repeat scroll 0% 0%;"&gt;countOfLockerDoors.&lt;/SPAN&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lockerDoor2flip = i;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: green; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* inner loop flips each i-th lockerdoor */&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do while (lockerDoor2flip &amp;lt;= &amp;amp;&lt;/SPAN&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: teal; background: white none repeat scroll 0% 0%;"&gt;countOfLockerDoors.&lt;/SPAN&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lockerDoor[lockerDoor2flip] = NOT lockerDoor[lockerDoor2flip];&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lockerDoor2flip+i;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: green; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* pivot */&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: teal; background: white none repeat scroll 0% 0%;"&gt;1&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt; to &amp;amp;&lt;/SPAN&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: teal; background: white none repeat scroll 0% 0%;"&gt;countOfLockerDoors.&lt;/SPAN&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lockerNumber = i;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = lockerDoor&lt;I&gt;;&lt;/I&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keep lockerNumber status;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: green; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* reporting */&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc sql noprint;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select count(*) into :countOpen&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from lockerinfo&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where status = &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: teal; background: white none repeat scroll 0% 0%;"&gt;1&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quit;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; title &lt;/SPAN&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: purple; background: white none repeat scroll 0% 0%;"&gt;"&amp;amp;countOpen. open locker doors found"&lt;/SPAN&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc print data=lockerinfo(where=(status=&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: teal; background: white none repeat scroll 0% 0%;"&gt;1&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;)) noobs;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var lockerNumber status;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: green; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* cleanup */&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc delete data=lockerinfo;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;STRONG style="color: navy; background: white none repeat scroll 0% 0%; font-family: 'Courier New';"&gt;%mend&lt;/STRONG&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt; reportOpenLockers;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;%&lt;STRONG&gt;&lt;EM&gt;reportOpenLockers&lt;/EM&gt;&lt;/STRONG&gt;(&lt;/SPAN&gt;&lt;STRONG style="color: teal; background: white none repeat scroll 0% 0%; font-family: 'Courier New';"&gt;100&lt;/STRONG&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;);&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ich muss sagen, dass auch mir das Implementieren Spaß gemacht hat und ich auch wieder etwas gelernt habe.&lt;/P&gt;&lt;P&gt;Beim Anspruch einen möglichst eleganten Code abzuliefern, habe ich u.a. ein längst vergessenes Feature wiederentdeckt:&lt;/P&gt;&lt;P&gt;beim Initialisieren des Arrays kann man mit der Syntax (n * Wert) n-fach einen Initialisierungswert angeben. Das spart mir eine Schleife, in der überall der Wert 0 gesetzt wird.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Den Status der Schließfachtür habe ich als Boolean implementiert. Anfangs hatte ich auch noch das folgende Codeschnipsel im Code stehen:&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-size: 8pt; font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;if(lockerDoor[locker2flip]) then do;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;&amp;nbsp; lockerDoor[locker2flip] = &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: teal; background: white none repeat scroll 0% 0%;"&gt;0&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;end;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;else do;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;lockerDoor[locker2flip] = &lt;/SPAN&gt;&lt;SPAN style="color: teal; background: white none repeat scroll 0% 0%; font-family: 'Courier New';"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%;"&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white none repeat scroll 0% 0%; font-size: 8pt;"&gt;end;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Dann wurde mir bewusst, dass es auch einfacher geht, indem der Boolsche Wert mit dem NOT Operator einfach negiert wird.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Insgesamt fand ich es auch spannend die anderen Lösungen zu sehen und zu vergleichen. Das man die Lösung auch ohne Arrays angehen kann, hätte ich z.B. als ich die Aufgabe gestellt habe, nicht erwartet.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Vielen Dank an alle Mutigen, die ihre Lösung mit der CoDe SAS Community geteilt haben! Weitere Lösungen können weiterhin gerne gepostet werden.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Viele Grüße,&lt;/P&gt;&lt;P&gt;Andreas Menrath&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 17 Jul 2015 08:28:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Spiegel-Online-R%C3%A4tsel-als-SAS-Code-Kata/m-p/200109#M99</guid>
      <dc:creator>AndreasMenrath</dc:creator>
      <dc:date>2015-07-17T08:28:47Z</dc:date>
    </item>
    <item>
      <title>Betreff: Spiegel Online Rätsel als SAS Code Kata</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Spiegel-Online-R%C3%A4tsel-als-SAS-Code-Kata/m-p/574920#M2552</link>
      <description>&lt;P&gt;Die Übung eignet sich wirklich gut für den Einstieg in Programmierung (mit SAS)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Ein Praktikant in unserer Abteilung hatte den interessanten Ansatz, die Schliessfächer nicht waagerecht zu speichern, sondern senkrecht, also ein Schliessfach entspricht einer Zeile in einer SAS-Tabelle.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Das wollte ich dann mal ausprobieren und habe folgende Lösung erstellt, bei der für jeden Durchgang eine neue Spalte angefügt wird.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro reportOpenLockers(ANZAHL=,AUF=,ZU=);
data SCHLIESSFAECHER;
  do SCHLIESSFACH=1 to &amp;amp;ANZAHL;
    DURCHGANG0 = "&amp;amp;AUF."; 
    output;
  end;
run;

%do I=1 %to &amp;amp;ANZAHL;
%let J=%sysfunc(sum(&amp;amp;I,-1));
data SCHLIESSFAECHER;
  set SCHLIESSFAECHER;
  DURCHGANG&amp;amp;I. = DURCHGANG&amp;amp;J.;
  if mod(_n_,&amp;amp;I)= 0 then do;
    if DURCHGANG&amp;amp;J. = "&amp;amp;AUF." then
      DURCHGANG&amp;amp;I. = "&amp;amp;ZU";
    else 
      DURCHGANG&amp;amp;I. = "&amp;amp;AUF.";
  end;
run;
%end;

%mend reportOpenLockers;
%reportOpenLockers(ANZAHL=100,AUF=auf,ZU=zu);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Dann wollte ich noch ändern, dass es nur eine Spalte gibt, die den aktuellen Zustand enthält. Diese Spalte wird also bei jedem Durchgang überschrieben.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro reportOpenLockers(ANZAHL=,AUF=,ZU=);
data SCHLIESSFAECHER;
  do SCHLIESSFACH=1 to &amp;amp;ANZAHL;
    DURCHGANG = "&amp;amp;AUF."; 
    output;
  end;
run;

%do I=1 %to &amp;amp;ANZAHL;
data SCHLIESSFAECHER;
  set SCHLIESSFAECHER;
    if mod(_n_,&amp;amp;I)= 0 then do;
      if DURCHGANG = "&amp;amp;AUF." then
        DURCHGANG = "&amp;amp;ZU";
      else 
        DURCHGANG = "&amp;amp;AUF.";
    end;
run;
%end;

%mend reportOpenLockers;
%reportOpenLockers(ANZAHL=100,AUF=auf,ZU=zu);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Schönes Wochenende allerseits!&lt;/P&gt;</description>
      <pubDate>Fri, 19 Jul 2019 12:15:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Spiegel-Online-R%C3%A4tsel-als-SAS-Code-Kata/m-p/574920#M2552</guid>
      <dc:creator>CKothenschulte</dc:creator>
      <dc:date>2019-07-19T12:15:14Z</dc:date>
    </item>
    <item>
      <title>Betreff: Spiegel Online Rätsel als SAS Code Kata</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Spiegel-Online-R%C3%A4tsel-als-SAS-Code-Kata/m-p/574932#M2553</link>
      <description>&lt;P&gt;Nettes Rätsel, meine Lösung ist vielleicht noch nicht richtig hübsch, man könnte bestimmt bei der Ausgabe noch einiges hübscher machen, aber mit der Berechnung bin ich recht zufrieden &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;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro reportOpenLockers(countOfLockerDoors);
	data Ausgabe;
		length Zustand 3;
		label Zustand = "Schließfach offen (0/1)";
		do _schliessfachnr = 1 to &amp;amp;countOfLockerDoors;
			Zustand = 0;
			do _durchlauf = 1 to &amp;amp;countOfLockerDoors;
				if mod(_schliessfachnr, _durchlauf) = 0 then do;
					Zustand = not(Zustand);
				end;
			end; /* _durchlauf = 1 to &amp;amp;countOfLockerDoors */
			output;
		end; /*_schliessfachnr = 1 to &amp;amp;countOfLockerDoors */
	run;

	proc sql;
		select sum(Zustand) into: _AnzahlOffen
		from Ausgabe;
	quit;

	Title "Aufteilung der %sysfunc(strip(&amp;amp;_Anzahloffen)) offenen Schließfächer";

	proc print data=ausgabe(keep= Zustand) noobs;
	run;


%mend reportOpenLockers;

%reportOpenLockers(100);&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 19 Jul 2019 13:05:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Spiegel-Online-R%C3%A4tsel-als-SAS-Code-Kata/m-p/574932#M2553</guid>
      <dc:creator>Christine2</dc:creator>
      <dc:date>2019-07-19T13:05:12Z</dc:date>
    </item>
    <item>
      <title>Betreff: Spiegel Online Rätsel als SAS Code Kata</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Spiegel-Online-R%C3%A4tsel-als-SAS-Code-Kata/m-p/574935#M2554</link>
      <description>&lt;P&gt;Beim Vergleich mit den anderen Lösungen fällt mir auf, dass ich die Aufgabe zwar gelöst habe, aber nicht wirklich die Aufgabenstellung. Bei mir geht der Mensch nicht x mal na den Schließfächern vorbei und öffnet/schließt beim n-ten Lauf das n-te Fach sondern er steht vor dem ersten Fach, führt alle x Läufe durch, geht dann zum zweiten und so weiter.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Das Ergebnis ist sicherlich das Gleiche, aber meine Lösung möchte glaube ich kein Mensch in der Wirklichkeit machen müssen &lt;span class="lia-unicode-emoji" title=":leicht_lächelndes_Gesicht:"&gt;🙂&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 19 Jul 2019 13:12:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Spiegel-Online-R%C3%A4tsel-als-SAS-Code-Kata/m-p/574935#M2554</guid>
      <dc:creator>Christine2</dc:creator>
      <dc:date>2019-07-19T13:12:30Z</dc:date>
    </item>
    <item>
      <title>Betreff: Spiegel Online Rätsel als SAS Code Kata</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Spiegel-Online-R%C3%A4tsel-als-SAS-Code-Kata/m-p/576118#M2555</link>
      <description>&lt;P&gt;Hallo zusammen,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;habe meine Lösung entworfen und festgestellt, dass diese (verständlicherweise) ähnlich zu schon geposteten Lösungen ist.&lt;/P&gt;
&lt;P&gt;Abweichend zu den bisherigen Ansätzen wird allerdings nicht der Zustand der Fächer betrachtet. Stattdessen zähle ich nur die Anzahl der Veränderungen der Zustände und ermittle daraus abschliessend den Endzustand des Fachs.&lt;/P&gt;
&lt;P&gt;Dabei gilt die Annahme, dass zu Beginn alle Fächer geschlossen sind.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
%macro reportOpenLockers(countOfLockerDoors);

data want (keep=offen anz_offen);
length offen $300. anz_offen 8; /* Ergebnisfelder */

array fach{&amp;amp;countOfLockerDoors.}; /* Fächer anlegen */

 do i = 1 to &amp;amp;countOfLockerDoors.; /* Loop Durchgänge */
   do j = i to &amp;amp;countOfLockerDoors. by i; /* Veränderung Fächer */
      fach{j} = sum(fach{j}, 1); /* Zähle Anzahl Veränderungen pro Fach */
   end;
 end;

 do z = 1 to &amp;amp;countOfLockerDoors.; /* Zählung */
   if mod(fach{z}, 2) = 1 then /* bei ungerader Anzahl Änderungen =&amp;gt; offen */
     do;
        offen = catx(' ', offen, put(z,best.)); 
        anz_offen = sum(anz_offen, 1);
	 end;
 end;
 output;
run;

%mend reportOpenLockers;

%reportOpenLockers(100);
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Herzliche Grüsse&lt;/P&gt;
&lt;P&gt;Michael&lt;/P&gt;</description>
      <pubDate>Wed, 24 Jul 2019 11:55:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Spiegel-Online-R%C3%A4tsel-als-SAS-Code-Kata/m-p/576118#M2555</guid>
      <dc:creator>mfab</dc:creator>
      <dc:date>2019-07-24T11:55:59Z</dc:date>
    </item>
    <item>
      <title>Betreff: Spiegel Online Rätsel als SAS Code Kata</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Spiegel-Online-R%C3%A4tsel-als-SAS-Code-Kata/m-p/576142#M2556</link>
      <description>&lt;P&gt;Als alternativer Ansatz hier noch eine Lösung mit Hash-Objekt:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
%macro reportOpenLockers(countOfLockerDoors);

data want (keep=offen anz_offen);
length offen $300. anz_offen mysuminc sum 8; /* Ergebnisfelder */

  declare hash myhash( suminc: 'mysuminc');
  rc = myhash.definekey("fach");
  rc = myhash.definedone();

/* Fächer anlegen */
mysuminc = 0;
do fach = 1 to &amp;amp;countOfLockerDoors.;
  myhash.add();
end;

/* Durchläufe */
mysuminc = 1;
do i = 1 to &amp;amp;countOfLockerDoors.;
  do j = i to &amp;amp;countOfLockerDoors. by i;
    rc = myhash.find(key:j);
  end;
end;

/* Auswertung */
do z = 1 to &amp;amp;countOfLockerDoors.;
  rc = myhash.sum(key:z, sum: sum);
  if mod(sum, 2) = 1 then
     do;
        offen = catx(' ', offen, put(z,best.)); 
        anz_offen = sum(anz_offen, 1);
	 end; 
end;

output;
run;

%mend reportOpenLockers;

%reportOpenLockers(100);
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 24 Jul 2019 13:05:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Spiegel-Online-R%C3%A4tsel-als-SAS-Code-Kata/m-p/576142#M2556</guid>
      <dc:creator>mfab</dc:creator>
      <dc:date>2019-07-24T13:05:07Z</dc:date>
    </item>
  </channel>
</rss>

