Ich versuche, ein Programm zu erstellen, das eine Textdatei übernimmt, alle darin enthaltenen Makroverweise ersetzt und sie an eine einzige Ausgabedatei anfügt. Die Makroreferenzen werden generiert, wenn ich über die Beobachtungen in einem Datensatz iteriere.Eine Datei Zeile für Zeile für jede Beobachtung in einem Dataset lesen
Ich habe Probleme, es zu versuchen, die gesamte Textdatei für jede Beobachtung in meiner Quellentabelle zu lesen. Ich denke, es gibt eine implizite stop
Anweisung im Zusammenhang mit meiner Verwendung der end=
Option auf der infile
-Anweisung, die verhindert, dass meine Set-Anweisung über jeden Datensatz iterieren.
ich die Vorlage und Code vereinfacht haben, Beispiele unter:
Hier ist die Vorlage, die ich zu füllen bin versucht:
INSERT INTO some_table (name,age)
VALUES (&name,&age);
Hier ist der SAS Code:
filename dest "%sysfunc(pathname(work))\backfill.sql";
data _null_;
attrib line length=$1000;
set sashelp.class;
file dest;
infile "sql_template.sas" end=template_eof;
call symput('name', quote(cats(name)));
call symput('age' , cats(age));
do while (not template_eof);
input;
line = resolve(_infile_);
put line;
end;
run;
Das Ausführen des obigen Codes erzeugt die gewünschte Ausgabedatei, aber nur für die erste Beobachtung im Dataset.
Vielen Dank für dieses konnte ich es zum Laufen bringen. Kannst du erklären, warum mein ursprünglicher Versuch nicht funktioniert? Ich möchte mein Verständnis verbessern ... –
Sie lesen die vollständige Eingabetextdatei bei der ersten Iteration des Datenschritts. Dann gab es keine Möglichkeit, SAS mitzuteilen, dass es die Textdatei von Anfang an lesen sollte, wenn Sie zur nächsten Beobachtung des Datenschritts kamen. Wenn Sie die Option FILEVAR verwenden, wird die Eingabetextdatei geschlossen und erneut geöffnet, wenn sich der Wert des Dateinamens ändert. – Tom
Ah, tut mir leid, ich musste in meinem vorherigen Kommentar klarer sein. Die Sache, die mich verwirrte, war, dass mein Code tatsächlich die Bearbeitung meines Datensatzes nach der Beobachtung 1 beendet! Wenn ich meine Anweisung 'data _null_' in' data tmp' ändere, dann sehen Sie in den Notizen nur eine einzige Beobachtung. Das verstehe ich nicht. –