2017-02-02 5 views
2

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.

Antwort

0

Ich vermute * wird erweitert oder anderweitig als etwas anderes als das * Zeichen behandelt. Versuchen Sie, das Argument vielleicht zu zitieren, wenn Sie es übergeben, um dieses Problem zu vermeiden.

fr dataset "var1*var2" 
+0

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. –

+0

Ah gut zu wissen. Vielleicht möchte ich das als Antwort posten. – Joe

+0

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

1

Das Problem hier ist outcum Option. Auch mit list angegeben funktioniert outcum nur für Einwegtische. Um das Problem zu umgehen, fügen Sie einen Datenschritt hinzu, um kumulative Statistiken zu berechnen.

#!/bin/bash 
echo "libname home ''; proc freq data=home.$1; tables $2/ missing out=t noprint; run; 
data t; set t(drop=percent); Cum_Freq + Count; run; 
proc print data=t 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 

Ich hoffe, das hilft jedem mit einem ähnlichen Problem.

Verwandte Themen