ODS: Auswahl nur gewisser Elemente einer Tabelle
Über ODS ist es ja möglich, nur gewisse Tabellen des Standardoutputs einer Prozedur ausgeben zu lassen.
Beispielsweise kann über folgenden Code
ods rtf file='c:\Ort\Name.rtf'
Style=science; * Ausgabe als RTF-File, Style Science;
ODS Listing close; * Disables the normal listing;
Proc CORR data=libname.file;
var
... Variablen ...
Run;
ODS _all_ close;
ods graphics off;
ods trace off;
ods listing; * re-enables default listing location after finishing ods statements;
Insgesamt werden für die folgenden drei Tabellen Outputs erzeugt
Output Added:
-------------
Name: VarInformation
Label: Variables Information
Template: base.corr.VarInfo
Path: Corr.VarInformation
-------------
Output Added:
-------------
Name: SimpleStats
Label: Simple Statistics
Template: base.corr.UniStat
Path: Corr.SimpleStats
-------------
Output Added:
-------------
Name: PearsonCorr
Label: Pearson Correlations
Template: base.corr.StackedMatrix
Path: Corr.PearsonCorr
Nun ist es natürlich mit bspw.
möglich, nur gewisse Tabellen auszuwählen (oder alternativ mit Exclude auszuschließen).
Wie ich jedoch nur gewisse Bestandteile einer solchen Tabelle ausgeben lassen kann (bspw. nur den Bravis Pearson Korrelationskoeffizienten ohne die automatisch in der Tabelle PearsonCorr generierten p-Values und Number of Observations), ist mir bislang unklar.
Hat jemand hier ne Idee?
- Anmelden oder Registrieren um Kommentare zu schreiben

Tabellen ändern mit Proc Template
In bestimmten Fällen kann man den Output anpassen, indem man die von der jeweiligen Prozedur (hier CORR) verwendeten Table-Templates verändert.
Um z.B. bestimmte Spalten in der Tabelle "SimpleStats" zu unterdrücken, reicht es, sich zunächst wie folgt die Definition des zugehörigen Templates "base.corr.UniStat" im Log anzeigen zu lassen mit
source base.corr.UniStat;
run;
wobei folgendes im Log angezeigt wird:
notes "Univariate Statistiken";
column Variable NObs Mean StdDev Sum Median Min Max PartialVariance
PartialStdDev Label;
header h1;
translate _val_=._ into "";
define h1;
text "Einfache Statistiken";
space = 1;
spill_margin;
end;
...
define Label;
header = "Etikett";
label = "Etikett";
end;
end;
Diese Definition kann man dann lokal z.B. wie folgt ändern:
edit Base.Corr.UniStat;
column Variable /*NObs*/ Mean StdDev Sum Median Min Max
PartialVariance PartialStdDev Label;
end;
run;
woraufhin die Spalte NObs nicht mehr gezeigt wird, wenn man Proc Corr aufruft.
Später kann man die geänderte Definition mit
delete Base.Corr.UniStat;
run;
wieder lokal löschen, woraufhin wieder die Standardausgabe verwendet wird.
Bei der Tabelle "PearsonCorr" geht dies aber dummerweise nicht, da hier das etwas allgemeinere Template "base.corr.StackedMatrix" verwendet wird, dessen Definition wie folgt aussieht:
notes "Standard-CORR-Stapelmatrix";
column (RowName RowLabel) (Matrix) * (Matrix2) * (Matrix3) *
(Matrix4);
translate _val_=._ into "";
define RowName;
parent = Common.Column.RowName;
varname = Variable;
end;
define RowLabel;
parent = Common.Column.RowLabel;
varname = Label;
end;
parent = common.stackedmatrix;
split_stack = OFF;
end;
Hierbei werden die eigentlichen Spaltennamen also über einen anderen Mechanismus festgelegt, den man so nicht durchschaut. Dies ist aber die Ausnahme, bei den meisten Tabellen scheint es wie oben zu gehen.
Also: Einfach mal in der Doc zu Proc Template schauen, was so alles geht!
ODS OUTPUT
Mir ist nicht ganz klar, wie die Ausgabe nachher aussehen soll. Man kann jedenfalls mit ODS OUTPUT nur die Korrelationen in eine SAS-Datei schreiben lassen und diese anschließend mit PROC PRINT in eine HTML-Datei ausgeben.
ods listing close;
ods output PearsonCorr=corr(keep=variable height weight);
proc corr data=sashelp.class;
var height weight;
run;
/* nur Korrelation nach HTML ausgeben */
ods html file='c:\temp\corr.html';
proc print noobs data=corr;
run;
ods html close;
Danke für die vielen
Danke für die vielen Tipps.
Grundsätzlich sollte die entsprechende Matrix mit den Korrelationen wie der Output der Tabelle PearsonCorr aussehen, nur mit dem Unterschied, dass ausser den Korrelationen keine weiteren Einträge vorhanden sind.
Da dies über Template-Anpassungen offenbar nicht/nur schwer realisierbar scheint, ist der Weg über Proc Print eine sehr gute Alternative.
Danke nochmals ;)