2017-06-09 1 views
0

Ich habe sas Code, den ich teilweise in C++ Code umwandeln muss, aber ich habe Mühe zu verstehen, seine Funktion. Ich habe keine Erfahrung mit sas und nach ein paar Stunden verschiedener Tutorials und Beispiele habe ich sehr wenig Fortschritte gemacht. Ich habe auch keinen Zugriff auf die Eingabedaten oder auf eine entsprechende Ausgabe. Der Code folgt das folgende Format, aber ich habe die Variablennamen geändert:Was bewirkt dieser SAS-Code-Block?

data data1; 
set data2; 
output; 

if type='ABCD' and zone=1 then do; 
    type='BCDE'; spec='CDE'; sub='ABCD DEF'; output; 
    type='EFGH'; spec='FGH'; output; 
    type='ABCD'; spec='DEF'; 
end; 

Der Code dann weiter, aber ich muss nur die Logik dieser if-Anweisung verstehen. Im tatsächlichen Code gibt es viele dieser Aussagen, aber sie alle folgen der gleichen Struktur, Verständnis sollte man mir helfen, sie alle zu verstehen. Die Variablenwerte sind nur insofern von Bedeutung, als Typ und Eindeutigkeit, wenn Variablen hier einen Wert teilen, auch im ursprünglichen Code zutreffen, ansonsten sind sie unterschiedlich.

Ich weiß, dass das Programm entworfen ist, um Kombinationen von Typ/Spec/Zone zu nehmen und sie in andere Typ/Spec-Kombinationen zu konvertieren, aber ich kann nicht scheinen, die Logik zu begreifen.

+1

IF-Anweisungen sind in fast allen Sprachen gleich. Das einzige Unterschiedliche ist das OUTPUT. OUTPUT verursacht einen expliziten WRITE-Vorgang. Da dieser Schritt OUTPUT aufweist, müssen Sie sich keine Gedanken über Datenschrittgrenzen machen. Was hier passiert, ist das Duplizieren des Datensatzes und das Erstellen eines anderen Typs/einer anderen Spezifikation für jeden Datensatz, so dass Sie für jeden Datensatz, der die IF-Bedingung erfüllt, Datensätze X 3 erhalten sollten. – Reeza

+0

@Reeza also, wenn ich richtig verstehe, für jeden Datensatz in den Eingabedaten findet es, dass der Typ 'ABCD' und Zone 1 hat, wird es den Datensatz kopieren und ersetzen seinen Typ mit 'BCDE', spec mit 'CDE' und sub Mit 'ABCD DEF' schreiben Sie den Datensatz in die Ausgabedaten. Wiederholen Sie dies mit der nächsten Zeile, was ist nun mit der dritten Zeile? es gibt nicht aus, passiert das Gleiche? – zach

+1

Ich vermute, dass es irgendwo später in Ihrem Code ein anderes OUTPUT gibt, das Sie nicht angezeigt haben. – Reeza

Antwort

2

Die DATA- und SET-Anweisungen definieren das Ziel bzw. die Quelle.

Die erste OUTPUT-Anweisung stellt sicher, dass für das Ziel mindestens eine Kopie jedes Datensatzes aus den Quelldaten gelesen wird.

Der Code innerhalb des DO END-Blocks der IF/THEN-Anweisung bewirkt, dass bei der Ausführung zwei weitere Datensätze geschrieben werden. Sie haben unterschiedliche Werte für die Variablen TYPE, SPEC und SUB, wie die Zuweisungsanweisungen angeben. Am Ende des DO-Blocks werden die Werte von TYPE, SPEC und SUB jeweils auf 'ABCD', 'DEF' und 'ABCD DEF' gesetzt.

Also, wenn Sie Ihre Eingabe ist

TYPE,SPEC,SUB,ZONE 
ABCD,UNK,UNK,0 
ABCD,XX,YY,1 
UNK,UNK,UNK,0 

Die Werte durch den Teil des Codes geschrieben Sie wäre gepostet.

TYPE,SPEC,SUB,ZONE 
ABCD,UNK,UNK,0 
ABCD,XX,YY,1 
BCDE,CDE,ABCD DEF,1 
EFGH,FGH,ABCD DEF,1 
UNK,UNK,UNK,0 
+0

Danke! Das Anzeigen der Eingabe/der entsprechenden Ausgabe war sehr hilfreich. Ich kann verstehen, was der Rest meines Codes tut, wenn er der gleichen Logik folgt. Ich habe die Frage etwas modifiziert, damit ich deine Antwort annehmen konnte. – zach

Verwandte Themen