Ich habe ein paar Skripts, mit denen ich einfache SAS-Befehle über die Befehlszeile ausführen kann, die ich gerade aktualisiere. Eine, mit der ich ein Problem habe, ist proc freq
. Es funktioniert gut, wie es jetzt geschrieben wird, aber ich würde gerne in der Lage sein, das Format der Ausgabe zu ändern.Ausführen von SAS-Prozeduren über die Befehlszeile
Hier ist der Arbeitscode:
#!/bin/bash
echo "libname home ''; proc freq data=home.$1; tables $2/ missing list;" > user$USER.sas
nohup sas -memsize 0m -sortsize -0m -autoexec /users/me/sastools/autoexec.sas user$USER.sas
more user$USER.lst
Nun, ich habe ein paar Änderungen vorgenommen, die mir erlauben, um das Ausgabeformat zu ändern.
#!/bin/bash
echo "libname home ''; proc freq data=home.$1; tables $2/ missing out=t outcum noprint; run;
proc print data=t(drop=percent cum_pct) noobs; format count cum_freq comma15.; run;" > user$USER.sas
nohup sas -memsize 0m -sortsize -0m -autoexec /users/me/sastools/autoexec.sas user$USER.sas
more user$USER.lst
Der neue Code funktioniert, wenn ich eine Variable in der Anweisung nur tables
angeben, aber das ist ein seltenes Ereignis. Wenn ich versuche, mehrere Variablen hinzuzufügen, wird nur die erste zurückgegeben.
Hier sind ein paar Beispiele dafür, wie diese ausgeführt wird:
fr dataset var1*var2
fr 'dataset; where var1 = condition; weight var2;' var4*var5
Vielen Dank im Voraus für die Hilfe.
Danke für den Vorschlag, das Problem war eigentlich die "Outcum" -Option. Mir war nicht bewusst, dass das Argument nicht für n-Wege-Tabellen (n> 1) funktionieren würde. Ich musste nur 'Cum_Freq' in einem Datenschritt neu erstellen. –
Ah gut zu wissen. Vielleicht möchte ich das als Antwort posten. – Joe
Sie können die Befehlszeilenoption '-stdio' verwenden. Dies würde die Notwendigkeit beseitigen, eine physische SAS-Programmdatei zu erstellen. Außerdem wird es Ihren Linien von SAS-Code in Ihrem Skript erlauben, normaler zu aussehen, anstatt innerhalb von ECHO-Befehlen eingehüllt werden zu müssen. – Tom