Kleine Hilfe zu SAS

Werbung
Erklärungen zur hier verwendeten Symbolik:
schwarz
blau
lila
grün
_
a
d....
v....
m...
dalt
dneu
name
n1
v1
Erklärungen
Syntax des jeweiligen SAS-Statements/der jeweiligen SAS-Procedures.
Optionen und deren Syntax für ein SAS-Statement.
Platzhalter für zu spezifierende Namen, Parameter, Werte, sonstige Angaben.
steht für ein Leerzeichen in der Syntax; (ACHTUNG: Leider gibt es im Zeichensatz
kein Extra-Zeichen für "Leerzeichen"; da dies aber in der SAS-Syntax wichtig ist,
wird es in der Beispielsyntax kenntlich gemacht; LEIDER wird von SAS das"_"
auch für von SAS vorgegebene Variablennamen verwendet; doppelte "_" zeigen
dies an oder innerhalb von Klammern beginnen die Variablennamen mit einem "_".
einzelne Buchstaben sind Platzhalter für Zahlen, die dort in die Syntax eingesetzt
werden müssen.
steht immer für Dateinamen eines SAS-DATA-Sets; anghängte Zahlen
unterscheiden verschiedene Dateien.
steht immer für Variablen(namen) ; anghängte Zahlen unterscheiden verschiedene
Variablennamen.
steht immer für Matrizen(namen); wird in der Regel nur in der PROC IML
verwendet;
alter Dateiname
neuer Dateiname
steht allgemein für eine Bezeichnung; anghängte Zahlen unterscheiden
verschiedene Bezeichnungen.
Kurzform für name (mit Nummerierung).
Kurzform für Variable (mit Nummerierung).
Alle Befehle (Statements) sind in alphabetischer Reihenfolge aufgelistet; bei Procedures
erfolgte die Einordnung mit dem Namensteil nach dem PROC...
Allgemeines zur SAS-Syntax:
Variablennamen dürfen nicht mehr wie 8 Zeichen enthalten. Sie dürfen keine Leerzeichen,
keine Sonderzeichen, keine Umlaute, kein _ß“, kein Punkt, kein Komma, keinen
Bindestrich enthalten.
Alphanumerische Variablen werden durch ein an den Variablennamen angehängtes $
gekennzeichnet, dies aber nur beim erstmaligen Definieren der Variable, im
weiteren Programmverlauf dann nicht mehr.
Zählvariablen werden durch die Syntax gekennzeichnet:
zv1 + a; in jeder Schleife wird a zu zv1 addiert und die Summe beim nächsten
Schleifendurchlauf als neuer Wert für zv1 verwendet; nur diese Variablen werden
garantiert nicht vor dem nächsten Schleifendurchlauf gelöscht.
Missings bei numerischen Variablen werden durch einen ‘.‘ (Punkt) symbolisiert, oder als
“Spezial-Missing“ kann ‘.N‘,‘.O‘, ‘.K‘, etc. verwendet werden; bei strings wird ein
Leerzeichen ausgegeben.
Listen von Variablen werden durch
• Auflistung aller einzelnen Variablennamen, jeweils durch ein Leerzeichen getrennt
(bei SQL durch ein Komma)
• durch Nennung des ersten und letzten Variablennamens (durch doppeltes minus '—'
getrennt) bei in der Tabelle aufeinanderfolgenden Variablen (Syntax: VAR_v1—
v2;
• bei Variablennamen mit angehängtem Zählindex durch Nennung des ersten und
letzten Variablennamens (Syntax: VAR_v1-v12);
SAS-Statements:
%.....
ruft ein Unterprogramm auf, das mit %MACRO definiert wurde: siehe MACRO
%LET
siehe LET
%MACRO siehe MACRO
%MEND siehe MACRO
%SCAN siehe SCAN
ALL
(SQL-Befehl) 1.) ermöglicht in einer WHERE-Abfrage den (zeilenweisen)
Vergleich einer Variablen mit mehreren Werten aus einer (einspaltigen) Tabelle
oder einer best. Spalte aus einer (mehrspaltigen) Tabelle;
WHERE_v1>ALL_(Argument) die Bedingung für v1 muß auf jeden Wert der in
Argument benannten Spalte zutreffen, damit die
Aussage wahr wird; Argument kann auch durch
eine SELECT-Routine ersetzt werden.
PROC SQL;
dies Beispiel listet v1, wenn der Wert von v1
SELECT_v1
nicht in der Spalte von v2 auftaucht.
FROM_dname1
WHERE_NOT_v1_=_ALL_(SELECT_v2
FROM_dname2)
;
QUIT;
ALTER (SQL-Befehl) siehe TABLE.
ANOVA (Procedure) führt eine ein- und mehrfaktorielle Varianzanalyse zwischen einer
kontinuierlichen abhängigen und einer nicht kontinuierlichen unabhängigen
Variable(n) durch; nur für balancierte Daten; die Analyse ist eine
Verallgemeinerung des t-Tests auf mehr als zwei Stichproben;die Werte der
unabhängigen Variable(n) werden wie nominal skalierte Daten behandelt (->
Klassifizierung); die Realisierungen von vabhängig müssen alle in einer Spalte
stehen. H0: die Mittelwerte aller Klassen sind gleich.
S.53-55; S.68, 69; A11, 12; A15.
PROC_ANOVA_data=dname;
MEANS ist optional und bildet die
CLASS_ vunabh1_ vunabh2 ;
Mittelwerte über die Klassen;
MODEL_vabhängig_=_vunabh1_ vunabh2; tukey testet, welche Klassen
RUN;
signifikant vonein ander
abweichen. (siehe MEANS)
Es können paarweise t-Tests durchgeführt werden.
PROC_ANOVA_data=dname;
die Fehlerwahrscheinlichkeit α=0.05 wird
CLASS_ vunabhängig;
hier aber nur für den einzelnen,
MODEL_vabhängig_=_vunabhängig; paarweisen Test eingehalten; für eine
MEANS_ vunabhängig_/_t;
Gesamtbetrachtung des Experiments ist
RUN;
eine Adjustierung notwendig (s.u.).
Paarweise t-Tests mit Adjustierung nach Sidak.
PROC_ANOVA_data=dname;
hier wird α=0.05 für das gesamte
CLASS_ vunabhängig;
Experiment eingehalten.
MODEL_vabhängig_=_vunabhängig;
MEANS_ vunabhängig_/_sidak;
RUN;
Bestimmung einer Grenzdifferenz nach Tukey beim Vergleich der Mittelwerte (ist
besser als sidak: s.o.).
PROC_ANOVA_data=dname;
hier wird α=0.05 für das gesamte
CLASS_ vunabhängig;
Experiment eingehalten; liegt 0 im KI der
MODEL_vabhängig_=_vunabhängig; Grenzdifferenz, so sind die Mittelwerte
MEANS_ vunabhängig_/_tukey;
nicht signifikant verchieden.
RUN;
ANY
(SQL-Befehl) 1.) ermöglicht in einer WHERE-Abfrage den Vergleich mit mehreren
Werten aus einer (einspaltigen) Tabelle oder einer best. Spalte aus einer
(mehrspaltigen) Tabelle;
WHERE_v1>ANY_tabname
die Bedingung für v1 muß auf nur einen Wert der
in Argument benannten Spalte zutreffen, damit
die Aussage wahr wird; Argument kann auch
durch eine SELECT-Routine ersetzt werden.
APPEND_FROM
siehe IML (Procedure)
ARIMA (Procedure) differenziert Zeitreihen; es werden Differenzen zu vorhergehenden
Zeitpunkten gebildet, um durch diese Datentransformation Varianz- bzw.
Mittelwerts-Stationarität zu erreichen; es wird die Transformation gesucht, die die
kleinste Varianz der transformierten Werte aufweist; durch Wahl der Zeitabstände
(Intervalle) können Trend (Intervall = 1) und/oder Saisoneffekte (Intervall =
Saisonlänge) heraustransformiert werden.
PROC_ARIMA_data=dname;
IDENTIFY_var=v1;
v1 enthält die Werte zur Zeitreihe; hier keine
Differenzenbildung.
IDENTIFY_var=v1(a,b,c);
differenziert erst nach Intervall a, dann nach
Intervall b, dann nach Intervall c (Anzahl der
Intervalle beliebig).
ESTIMATE_p=(a)
schätzt Modellparameter; p gibt an, daß ein ARProzeß a-ter Ordnung bestimmt werden soll; bei
p=0 weglassen.
_q=(b)
q gibt an, daß ein MA-Prozeß b-ter Ordnung
bestimmt werden soll; bei q=0 weglassen.
_plot;
Grafik der ACF und PACF der Residuen, um zu
prüfen, ob die Residuen white noise entsprechen.
FORECAST_lead=c
prognostiziert Werte für die folgenden c
Zeitpunkte
_id=v3;
RUN;
PROC_ARIMA_data=d1;
IDENTIFY_var=v1
_crosscorr=v2;
spezifiziert die zweite Zeitreihe für eine
Kreuzkorrelation (v2 = Einflußvariable) bzw.
Regression mit autokorrelierten Störungen.
ESTIMATE_p=(a)
_q=(b)
_input=v2
_plot;
RUN;
PROC_ARIMA_data=d1;
IDENTIFY_var=v1(a,b);
ESTIMATE_p=(a) (b)
_q=(a);
RUN;
definiert v2 als Einflußzeitreihe (-variable).
Hier wird ein SARIMA (1,1,1)x(1,1,0)b -Modell
spezifiziert; es wird nach a und b differenziert; es
gibt zwei Faktoren für den AR-Prozeß, einen für
den MA-Prozeß.
ARRAY legt ein Variablen-Array (indizierte Variable mit Grenzen für die Indizees) fest; die
Einzelvariablen können dann mit der direkten Bezeichnung (z.B. v1, v2, v3 , usw.)
oder über Laufvariable i als Indizee mit v[i] z.B. in einer DO-Schleife
angesprochen werden (siehe auch Beispiel 10).
ARRAY_vneu{c}_d_va-vb;
die Indizees der Variable v laufen von a bis b; das
Array vneu besteht aus c=(b-a+1) Einzelzellen (variablen); d gibt die Größe der einzelnen Zellen
in Byte an (optional; Default=8).
ARRAY_vneu{c}_$_va-vb;
definiert ein Array für String-Variablen.
ARRAY_varr_v1_v2_v3_v4;
ARRAY_vneu{*}__numeric_; * läßt die Anzahl der Array-Variablen offen;
diese wird angepaßt; hier werden durch die
Systemvariable _numeric_ alle numerischen
Variablen des Datasets mit einbezogen; mit der
Funktion dim(vneu) kann dann die Anzahl der
Variablen zurückgegeben werden.
ARRAY_vneu{*}__character_; wie oben, aber hier alle Character-Variablen.
AS
(SQL-Befehl) 1.) ermöglicht die Einführung von neuen Variablen oder
Umbenennungen von bereits vorhandenen Variablen oder Dateien(namen); diese
neuen Namen können in den übrigen Befehlen (außer bei WHERE !!!) der gleichen
PROC SQL verwendet werden. 2.) im Befehl CREATE TABLE: siehe dort.
SELECT_v1_AS_v1neu
FROM_lib.d1_AS_d1neu
so können alias-Namen für Pfade und
libname.dname vergeben werden
AXISa
legt das Achsenlayout Nr.a fest; die Zuordnung zur betreffenden Grafikachse
erfolgt mit dem Befehl PLOT.
AXISa_label=(color=farbe
Achsenbezeichnung - Farbe
height=n
Schriftgröße
font=swiss
Schriftart (hier SWISS)
justify=left
Achsenbezeichnung- Textorientierung
angle=90
Achsenbezeichnung-Drehung des Textes
‘name’)
Achsenbezeichnung -Text
_minor=none
bestimmt das Format der „minor tickmarks“; mit
none werden keine minor dargestellt.
_order=b_TO_c_BY_d bestimmt das Format der „major tickmarks“;
b=kleinster, c=größter Wert, d=Intervall.
_value=(angle=90) ;
dreht den Text der tickmark-Beschriftung um
90 Grad.
BETWEEN
(für SQL) legt Grenzen für ein WHERE-Statement fest.
WHERE_v1_BETWEEN_a_AND_b
wird wahr wenn der Wert von v1
zwischen a und b liegt.
BLOCK erzeugt 3-D-Säulen-Grafiken; um mehrere Säulenreihen hintereinander
darzustellen, müssen die Werte alle in einer Spalte stehen und die Reiehn werden
dann mit einer Klassifizierungsvariable differenziert.
BLOCK_vname;
BLOCK_vn1_/_group=vname2
gruppiert Säulenreihen;
/_midpoints=a_to_b_by_c; legt die Klassenmitten k fest: a ist
kleinster, b größter Wert für k mit
Schrittweite c zwischen den
Klassenmitten.
BY
gibt die Variable(n) an, nach der (denen) sortiert oder klassifiziert (in Tabellen oder
in Grafiken) werden soll; bevor BY in einer PROC verwendet werden kann, muß
die jeweilige Datendatei mit PROC_SORT nach der betreffenden Variable(n)
sortiert werden.
BY_vname1_vname2;
CALL LABEL
übergibt das Label einer Variable als Text-Eintrag in eine neue Variable;
vneu muß vor dem CALL-Statement als Stringvariable (z.B. LENGTH_vneu_$8.;)
definiert werden (siehe auch Beispiel 10).
LENGTH_vneu_$8.;
CALL_LABEL(valt,_vneu);
CALL SYMPUT definieren von Globalvariablen (Makrovariablen) innerhalb eines DATASteps mit Werten, die in diesem DATA-Step berechnet wurden; hier
können auch G.-variablen kreiert werden, deren Inhalt später als
Variable(nnamen) verwendet werden kann (siehe Beispiel 3).
ACHTUNG: wenn die mit CALL SYMPUT benannte Variable vor einem
lokalen Aufruf/Erzeugung nicht definiert wurde, wird sie nur in die lokale
Variablenliste aufgenommen, ist also nicht global verfügbar; Abhilfe: den
Variablennamen mit %GLOBAL definieren oder außerhalb des Makros
mit %LET benennen.
CALL_SYMPUT_('v1',_PUT(v2,_best.);
der Wert der numerischen Variable v2 wird als
String an die Globalvariable v1 übergeben; v1 hat
dann einen alphanumerischen Charakter und muß
daher in Hochkommas stehen.
CALL_SYMPUT_('v1',_v3); der string von Variable v3 wird in die
Globalvariable v1 übertragen.
CALL_SYMPUT_('v1',_TRIM(LEFT(v2,_a.b)));
Um den Zahlenwert der Globalvariable als Zahl in
anderen Statements zu nutzen (z.B. als
Spaltennummer im FILENAME-Statement beim
Einlesen aus einer Excel-Tabelle) müssen die
Ziffern linksbündig in der Variable positioniert
werden; die Formatangabe a.b muß/kann wohl weg!
CALL VNAME
übergibt den Namen einer Variable als Text-Eintrag in eine neue Variable;
vneu muß vor dem CALL-Statement als Stringvariable (z.B. LENGTH_vneu_$8.;)
definiert werden (siehe auch Beispiel 10).
LENGTH_vneu_$8.;
CALL_VNAME(valt,_vneu);
CANCORR (Procedure) führt kanonische Korrelationsanalyse für zwei Variablengruppen
durch ; es werden Linearkombinationen (= kanonische Variablen; W..) der
"WITH"-Variablen (Gruppe 2; s.u.) gesucht, die die "VAR"-Variablen (Gruppe 1)
möglichst gut erklären; dabei wird die Korrelationsstruktur der "WITH"-Variablen
untereinander mitberücksichtigt.
PROC_CANCORR_data=dname
_corr;
gibt die Korrelationen zwischen den
Originalvariablen aus.
VAR_v1_v2;
Liste der Variablen in Gruppe 1;
WITH v3 v4;
Liste der Variablen in Gruppe 2;
RUN;
CAPABILITY (Procedure) führt Basis-Statistiken durch (kann mehr als PROC
UNIVARIATE).
CARDS hiermit können die Werte für die mit INPUT definierten Variablen direkt aus dem
Programmtext eingelesen werden (siehe auch INPUT). Die nachfolgenden Werte
werden nicht mit einem Semikolon abgeschlossen. Die einzelnen Werte werden
durch Leerzeichen getrennt. CARDS erzeugt automatisch einen OUTPUT und
danach einen Rücksprung zur vorhergehenden INPUT-Programmzeile, solange, bis
alle cards abgearbeitet sind.
CARDS;
wert1 wert2 wert3
CASE... (SQL-Befehl) knüpft den zeilenweisen Eintrag von Werten an Bedingungen; hinter
THEN und ELSE können die gleichen Einträge wie bei SELECT (außer *)
verwendet werden; wichtig: die WHEN-Bedingungen (Anzahl beliebig) werden
der Reihe nach abgearbeitet; ist eine der Bedingungen erfüllt, wird zugehöriges
THEN ausgeführt und das Programm überspringt alle folgenden Schritte bis zum
END.
SELECT_CASE_WHEN_Bedingung1_THEN_v1
WHEN_Bedingung2_THEN_"Text"
WHEN_Bedingung3_THEN_v2*v3
ELSE_sum(v4)
END_AS_vneu
FROM_dname
CATMOD (Procedure) testet Loglineare Modelle für kategoriale Daten.
PROC_CATMOD_data=dname;
MODEL_vzeile*vspalte=_response_; '_response_' ist hier ein Schlüsselwort
und muß so stehen bleiben!
LOGLIN_vzeile|vspalte;
hier werden die betrachteten Effekte
angegeben (in diesem Fall saturiertes
Modell mit Wechselwirkung)
RUN;
PROC_CATMOD_data=dname;
MODEL_v1*v2*v3*v4=_response_;
LOGLIN_v1|v2|v3|v4_@a;
hier wird die Anzahl der betrachteten
Wechselwirkungsterme insofern begrenzt, daß nur Terme mit maximal a
Komponenten berücksichtigt werden.
RUN;
PROC_CATMOD_data=dname;
MODEL_v1*v2=_response_
_/_pred=freq gibt die mit dem spezofizierten Modell
berechneten (geschätzten) Zellhäufigkeiten und die beobachteten Zellhäufigkeiten aus (Ausgabereihenfolge entspricht dem Response Profile).
_noprofile
keine Ausgabe der "Response Profiles".
_noresponse keine Ausgabe der "Response Matrix".
_noiter
keine Ausgabe der Zwischenergebnisse.
_noparm;
keine Ausgabe der "Analysis of
Maximum-Likelihood-Estimates".
LOGLIN_v1_v2;
nicht saturiertes Modell (ohne Wechselwirkungsterm).
RUN;
CLASS
legt fest, welche Variable als Klassifizierungsvariable verwendet werden soll;
enthält die Variable Zahlenwerte, so werden diese als nominal skaliert behandelt; es
wird keine Klassierung durchgeführt.
CLASS_v1_v2;
(siehe PROC ANOVA und PROC GML)
CLUSTER führt hierarchische Clusteranalysen durch;
PROC_CLUSTER_METHOD=meth
für meth kann single, complete, average,
centroid, median, ward nd einiges mehr
verwendet werden (siehe Register).
_data=dname
_outtree=dneu;
gibt in die Datei dneu Informationen für
ein Dendogramm aus, das mit PROC
TREE gezeichnet werden kann.
VAR_v1_v2_v3;
benennt die Variablen, die in die
Clusterung mit einbezogen werden; fehlt
dieses Statement, werden alle in der datei
enthaltenen metrischen Varaiblen
verwendet.
ID_vlabel;
aus vlabel werden Bezeichnungen für die
einzelnen Beobachtungen entnommen
(z.B. für Dendogramm).
COPY_v5_v6;
die Variablen v5, v6 werden zusätzlich
mitgeführt.
RUN;
COLUMN benennt die mit PROC REPORT auszugebenden Variablen und legt die
Reihenfolge (= Ausgabehierarchie) der Spalten fest;
COLUMN_v1_v2_v3;
v1 bis v3 werden für die Output-Tabelle
verwendet.
COLUMN_v1_
('text'_v2_v3)
v2 und v3 werden mit einer gemeinsamen,
zusätzlichen Spaltenüberschrift text ausgegeben.
('text#----'_v4_v5); wie oben; wenn # mit der split= Option (siehe
REPORT) angegeben wurde, wird die Überschrift
in einer zweiten Zeile unterstrichen.
CONTENTS (Procedure) gibt Informationen zur Struktur eines Data-Sets (welche Variablen,
Labels, Attribute, etc.) aus.
PROC_CONTENTS_data=dname
_position;
gibt die Variablen in der Reihenfolge der
Positionen aus.
RUN;
CONTRAST
hier können selbst aufgestellte Hypothesen vorgegeben werden, für die dann
ein Test durchgeführt wird (in PROC GLM, Varianzanalyse); die Hypothese
betrifft die Parameterschätzer für die Faktorstufen eines im MODELStatement angegebenen Einflußfaktors; H0: ‘die Summe der
Parameterschätzer der verschiedenen Faktorstufen ist gleich 0‘ wobei für die
Parameterschätzer konstante Vorfaktoren spezifiziert werden. (als
Vorfaktoren können auch 0 und negative Zahlen eingesetzt werden).
(siehe auch ESTIMATE)
CONTRAST_‘label‘_var_a_b_c; label ist ein Name für den Kontrast (für den
Output); var ist die betrachtete Einflußgröße:
diese hat hier mindestens 3 Faktorstufen, für die
die Vorfaktoren a, b, c angegeben sind (für
weitere Faktorstufen würde automatisch 0
gesetzt);
CONTRAST_‘label‘_var_1;
testet, ob Parametersch. der 1. Faktorstufe = 0.
CONTRAST_‘label‘_var_1_-1; testet, ob Parametersch. der 1. und 2. Faktorstufe
gleich sind.
CONTRAST_‘label‘_var_1_-2; testet, ob Parametersch. der 1. Faktorstufe
doppelt so groß ist wie der von der 2..
CORR
(Procedure) berechnet Korrelationen: Pearson-Maßkorrelation, SpearmanRangkorrelation, ... ; im Output erscheinen Korrelation, Signifikanz und Anzahl
eingegangener Beobachtungen.
PROC_CORR_data=dname
_pearson
„normale“ Pearson’sche Maß-Korrelation.
_spearman
Rang-Korrelation nach Spearman.
_outp=dneu;
schreibt in dneu Korrelationsmatrix nach
Pearson
VAR_v1 v2 v3;
erzeugt komplette Korrelationsmatrix für v1 – v3.
WITH v3 v4 v5;
erzeugt Korrelationen nur zwischen diesen und
den unter VAR.. angegebenen Variablen.
RUN;
CORR
(SQL-Befehl) siehe UNION.
count
(SQL-Befehl) Kenngröße wird wie eine Variable verwendet; bestimmt die Anzahl
von Einträgen in einer Spalte;
SELECT_count(sp1)_AS_v1 hier wird nur ein Zahlenwert ausgegeben.
FROM_tab1;
SELECT_count(sp1)_AS_v1 mit GROUP BY kann eine Gruppierungsvariable anFROM_tab1
gegeben werden; es wird dann für jede Gruppe geGROUP_BY_sp2;
trennt gezählt.
CREATE (SQL-Befehl) wird in verschiedenen Befehlsfolgen verwendet:
CREATE INDEX
siehe INDEX
CREATE TABLE
siehe TABLE
CREATE VIEW
siehe VIEW
CREATE_..._FROM
DATA
siehe IML (Procedure)
erzeugt einen (oder mehrere) Data-Set, der unter dname abgespeichert wird;
innerhalb des DATA-Steps können Globalvariablen oder Macros verwendet werden
(siehe unten); Reihenfolge der Variablen ändern: siehe Beispielprogramme 2a bis
2b.
DATA_dname;
speichert im saswork-Verzeichnis
SET_dalt;
RUN;
DATA_ libname.dname;
speichert im mit LIBNAME definierten Verzeichnis
SET_dalt;
RUN;
DATA_dname1_dname2;
erzeugt zwei identische Dateien.
SET_dalt;
IF_(Bedingung);
die jeweilige Datenzeile von dalt wird nur dann in
dname übernommen, wenn die Bedingung erfüllt ist.
vneu=(Bedingung);
wenn die Bedingung wahr wird, ist vneu=1, sonst
vneu2=(valt>30);
vneu=0; wenn (valt>30)=wahr, dann vneu2=1.
vneu3=“&valt“;
der Inhalt der Globalvariable valt wird an vneu3
übergeben (!! doppelte Hochkommas !!)
&vgl=wert;
so wird der Inhalt der Globalvariable vgl als
Variablenname verwendet und an diese Variable
‘wert‘ übergeben.
RUN;
DATA_dname;
INPUT_v1;
LABEL_v1="Text";
CARDS;
wert1 wert2 wert3
RUN;
DATA_d1_d2;
über IF-Anweisugen kann der OUTPUT in die
SET_dalt;
entsprechende Datei gesteuert werden.
IF_(Bedingung1)_THEN_OUTPUT_d1;
IF_(Bedingung2)_THEN_OUTPUT_d2;
RUN;
DATA_d1_d2;
MERGE_d3_d4_(in=hind4);
IF_(hind4)_THEN_OUTPUT_d1;
ELSE_OUTPUT_d2;
RUN;
DATA_dneu1_(KEEP=_va-vb) teilt dalt in zwei Dateien auf.
_dneu2_(DROP=_va-vb);
SET_dalt;
RUN;
DATA_d1_(type=corr);
spezifiziert den Typ der einzulesenden Daten; die
Datei d1 ist dann entsprechend gekennzeichnet;
=corr: Korrelationsmatrix, =distance: Distanzmatrix.
INFILE_'Pfad';
RUN;
DATA_dname;
SET_&text;
hier wurde Dateiname (inklusive Libname) mit
%LET (ohne Hochkommas !!) in die Globalvariable
text eingelesen.
RUN;
DATA_dname;
SET_libname.%text;
hier wird nur der Dateiname mit Hilfe eines Macros
mit der Macro-Funktion %SCAN eingelesen (siehe
Beispiel bei SCAN).
RUN;
DATA_dname;
SET_dalt;
in dalt ist Stringvariable v2 enthalten.
v1=put(v2, $chara.)||‘text‘; der Inhalt von v1 setzt sich jeweils aus dem Inhalt
von v2 als string der Länge a. zusammen, an den
text angehängt wird.
oder v1=put(v2, a.)||put(“&text“, b.); hier wird der Inhalt der Globalvariable
text als Zeiochenkette der länge b. angehängt.
RUN;
DBLOAD
siehe Beispiel 6
DEFINE
definiert den Ausgabestil einzelner Spalten in PROC REPORT;
DEFINE_v1_/_order
sortiert die Werte in v1 jeweils zu den zugehörigen,
der davor stehenden, hierarchisch übergeordneten
Spalte; Achtung: wenn Formate vergeben wurden,
haben diese Vorrang für die Sortierreihenfolge,
daher z.B. bei Datum aufpassen !!)
_left
bestimmt die Orientierung des Eintrags in der
Spalte (andere: center, right).
_width=a
Breite der Spalte, angegeben in Anzahl Zeichen.
_display
stellt bei numerischen Variablen nur vorhandene
Nachkommastellen dar.
_flow;
bewirkt Zeilenumbruch bei Text, der länger als die
Spalte breit ist; (Achtung: wenn im Text ein '/'
auftaucht, wird dies als <return> = neue Zeile
interpretiert, da per Voreinstellung '/' als
Trennzeichen gilt (Æ mit split – Option in PROC
REPORT ändern); das Zeichen wird nicht
ausgegeben).
DEFINE_v1_/_order_order=internal;
gibt zum einen eine übersichtliche Ausgabe (Werte
werden nur bei Änderung in Folge ausgegeben),
richtet sich aber zum anderen nach der in der Dati
vorgegebenen Reihenfolge.
DELETE
hiermit können einzelne Datensätze/Datenzeilen aus einem Data-Set
entfernt/gelöscht werden;
z.B. IF_NOT_(vname=a)_THEN_DELETE;
DELETE
(SQL-Befehl) löscht einzelne Datensätze in Abhängigkeit von best.
Bedingungen aus einer bestehenden Tabelle.
DELETE_FROM_tab1_
WHERE_Bedingung;
DESCRIBE (SQL-Befehl) fragt die Definition eines VIEW ab und zeigt die Syntax im log
Fenster an.
DESCRIBE_VIEW_viewname;
DISCRIM (Procedure) führt Diskriminanzanalyse durch;
PROC_DISCRIM_data=dname dname wird zur Erstellung der Klassifikationsregeln analysiert.
_testdata=dtest dtest wird nach diesen Regeln klassifiziert.
_method=..... bestimmt die Herleitungsmethode für die
Klassifikationsregeln; =normal: parametrischees
Verfahren, basiert auf einer multivariat-normalen
Verteilungsannahme; =npar: nicht parametrisches
Verfahren.
_pool=.....
spezifiziert die Voraussetzungen für die
Kovarianzstruktur (KS) der verschiedenen
Klassen; =yes :die KS aler Klassen sind gleich;
=no : die KS sind ungleich; =test : führt einen
Test (H0 'KS sind gleich') durch und wählt die
Methode aus (Default: alpha=10%).
_slpool=a;
a gibt alpha-Schranke für KovarianzHomogenitätstest an.
_crossvalidate führt eine Kreuzvalidierung durch (siehe
Sachregister).
_crosslist
listet die Ergebnisse der Kreuzvalidierung.
CLASS_v1;
v1 in dname gibt die Gruppierung vor, für die die
Klassifikationsregeln gefunden werden sollen.
RUN;
DM
weiß nicht genau, globales Statement für z.B.
DM_'CLEAR_log';
löscht den Inhalt des Log-Fensters.
DO
bewirkt die Wiederholung eines Programmteils (muß immer mit einem END
abgeschlossen werden)
DO_i=a_TO_b_BY_c;
führt die Schleife ((b-a)/c+1)-mal aus
END;
DO_i=a, _b, _c;
END;
DO_i=a _TO_b;
v[i]=x;
END;
führt die Schleife jeweils für a, b und c aus
vergibt an die indizierte Variable v für die Indizees
a bis b den Wert x.
DROP
löscht Variablen (Spalten aus dem Data-Set)
DROP_v1_v2;
löscht die Variablen v1 und v2
END
siehe DO
ESTIMATE
hier können selbst aufgestellte Hypothesen vorgegeben werden, für die dann
ein Test durchgeführt wird (in PROC GLM, Varianzanalyse); die Hypothese
betrifft die Parameterschätzer für die Faktorstufen eines im MODELStatement angegebenen Einflußfaktors; H0: ‘die Summe der
Parameterschätzer der verschiedenen Faktorstufen ist gleich 0‘ wobei für die
Parameterschätzer konstante Vorfaktoren spezifiziert werden. (als
Vorfaktoren können auch 0 und negative Zahlen eingesetzt werden).
(siehe auch CONTRAST)
ESTIMATE_‘label‘_var_a_b_c; label ist ein Name für die Hypothese (für den
Output); var ist die betrachtete Einflußgröße:
diese hat hier mindestens 3 Faktorstufen, für die
die Vorfaktoren a, b, c angegeben sind (für
weitere Faktorstufen würde automatisch 0
gesetzt);
ESTIMATE _‘label‘_var_1;
testet, ob Parametersch. der 1. Faktorstufe = 0.
ESTIMATE _‘label‘_var_1_-1; testet, ob Parametersch. der 1. und 2. Faktorstufe
gleich sind.
ESTIMATE _‘label‘_var_1_-2; testet, ob Parametersch. der 1. Faktorstufe
doppelt so groß ist wie der von der 2..
EXACT ruft exakte Teststatistiken auf; wird in PROC FREQ verwendet.
EXACT_mhchi
exakter Mantel-Haenszel-Chi²-Testwert.
_trend
exakter Cochran-Armitage-Testwert.
_mcnem
exakter Mc-Nemar-Testwert.
_rror;
exakte relative-risk- und odds-ratio-Werte
EXCEPT (SQL-Befehl) wird wie UNION eingesetzt, liefert aber das entgegengesetzte
Ergebnis: es werden nur Datenzeilen ausgegeben, für die in der andern Datei keine
Übereinstimmungen gefunden wurden;
Achtung: bei beiden SELECT-Befehlen muß die gleiche Anzahl Variablen
selektiert werden!
SELECT_a,b_FROM_t1
liefert die Zeilen von t1 (keine doppelten !), die in a
EXCEPT
oder b keine Übereinstimmung mit Werten von
SELECT_a,b_FROM_t2;
entsprechend a oder b in t2 haben.
.....EXCEPT_ALL.....
gibt auch doppelte mit aus.
EXISTS (SQL-Befehl) führt zu einer Ausgabe, wenn die Bedingung wahr (bzw. bei NOT
EXISTS nicht wahr) ist; im ersten Beispielen also dann, wenn die geschachtelte
SELECT-Abfrage irgendeine Zeile ausgibt; wird meist in WHERE-Abfragen
verwendet;
SELECT_*_FROM_tab
gibt die betreffende Zeile von tab aus,
WHERE_EXISTS_(SELECT...);
wenn die geschachtelte SELECTRoutine kein leeres Ergebnis hat.
SELECT_*_FROM_tab
gibt die betreffende Zeile von tab aus,
WHERE_NOT_EXISTS_(SELECT...); wenn die geschachtelte SELECTRoutine ein leeres Ergebnis, also
keinen Eintrag hat (missing value ist
ein Eintrag!!!).
FILENAME legt einen alias-Namen für einen (Pfad+Dateinamen) fest um externe Dateien
mit SAS-fremden Speicherformat zu einzulesen (z.B. auch mit INFILE) oder
zu erzeugen; wird ähnlich wie LIBNAME verwendet; für EXCELImport/Export siehe Beispiel 5.
FILENAME_alias_’pfad\dname.ext’;
alias ist der im weiteren Programm
verwendbare Name; in diesem Fall muß
die Extension „ext“ beim Dateinamen
angegeben werden; mit der Option device
wird unter GOPTIONS dann das
Speicherformat festgelegt.
FILENAME_export_DDE_“excel_|_tabelle1!zasb:zcsd“
spezifiziert den Datenexport von SAS
nach EXCEL (siehe Beispiel 5a); tabelle1
entspricht dem Tabellennamen in EXCEL;
a, b, c, d sind Zeilen- (z) und Spalten- (s)
–nummern, die den einzulesenden
Datenblock in EXCEL begrenzen.
_notab;
diese Option verhindert z.B., daß strings
beim Einlesen nach dem ersten
Leerzeichen abgeschnitten werden (die
Trennungen zwischen den Variablen
müssen dann aber im PUT-Statement
„manuell“ eingebaut werden: siehe
Beispiel 5d)
FOOTNOTE (globales Statement) fügt Fußnoten in die Ausgabe mit ein;
FOOTNOTE_'Text';
FOOTNOTE_j=l_'Text'; Option j bewirkt eine Justierung des Textes: l = links-, r
= rechtsbündig, c = mittig.
FORECAST (Procedure) liefert Vorhersagen für Zeitreihenmodelle;
PROC_FORECAST_data=dname
_lead=a
bestimmt die Anzahl (a) der Zeitpunkte ,
für die Werte geschätzt werden sollen
(direkt im Anschluß an die bereits
vorliegenden).
_trend=a
bewirkt keine (a=1), eine lineare (a=2)
oder quadratische (a=3) Anpassung.
_season=b
die Saison hat eine Länge von b
Zeitpunkten.
_out=dneu
_outall
_method=expo
einfaches exponentielles Glätten.
=addwinters additives Holt-Winters-Verfahren; ->
additive Saison.
=winters;
multiplikatives Holt-Winters-Verfahren;
-> multiplikative Saison.
VAR_var1;
ID_var2;
in var2 stehen die Beobachtungszeitpunkte.
RUN;
FORMAT
(Procedure) definiert Variablenformate für die Ausgabe; im Beispiel wird
festgelegt, daß, wenn für die Variable fname der wert1 erscheint, stattdessen der
string1 ausgegeben wird, bzw. wenn fname den wert2 annimmt, der string2.
(Achtung: formatisierte Daten können nur noch mit Hilfe der FormatDateien/Anweisungen angesehen werden; unter dem Libname 'library' muß der
Pfad angegeben werden, unter dem die entsprechende Formatdatei *.sc2 steht;
falls diese Datei verloren geht, können die Daten nach Voreinstellung von
OPTIONS_nofmterr; auch so betrachtet werden.);
Formatnamen dürfen nicht mit einer Ziffer enden!! (siehe Statement FORMAT)
PROC_FORMAT;
temporäres Format.
VALUE_fname1_wert1='string1'_wert2='string2';
RUN;
PROC_FORMAT_library=libname
permanentes Format; erzeugt format.sc2
Datei unter libname.
_cntlin=dname;
die Formatanweisungen werden aus
dname gelesen; es müssen die Variablen
fmtname, type, start und label für Formatnamen, Typ (‚n‘ für numerisch, ‚c‘ für
string; kleinster Wert (dem das label
zugewiesen werden soll) und Label
angegeben sein.
RUN;
PROC_FORMAT_library=libname
_fmtlib;
listet die Wertelabel mit zugehörigen
Werten.
SELECT_fname;
von Format fname.
RUN;
PROC_FORMAT_ library=library
_cntlout=dname;
schreibt die Wertelabel und Werte in die
Datei dname.
SELECT_fname;
von Format fname.
RUN;
FORMAT
legt Format von Daten für Ausgabe im Out-Fenster und für Dateispeicherung
fest; wird im DATA-Step benutzt; die Werte der Variablen werden
FORMAT_vname_a.b;
vname wird mit maximal a Stellen und mit
maximal b Nachkommastellen dargestellt.
FORMAT_var1_var2_fname.;
weist var1, var2 das Format fname zu; fname
wurde in PROC FORMAT definiert (wichtig:
nach fname muß ein Punkt (".") stehen!!).
FORMAT_var1_fnameb.;
gibt die Formate von var1 mit maximal b Zeichen
aus (b ist eine Zahl).
FORMAT_var1_za.b;
Zahlenformat; beachte den '.' zwischen a und b; a
gibt an, wieviele Stellen insgesamt (inklusive
Komma) ausgegeben werden (freie Stellen
werden mit '0' aufgefüllt), b wieviele davon
Nachkommastellen sind.
FORMAT_vdatum_ddmmyya.; vdatum ist eine SAS-Datumangabe (Zahl
bezogen auf 01.01.1960 = 0); a ist eine Zahl, die
das Ausgabeformat bestimmt: a=6 ohne
Trennzeichen, a=8 mit Trennung und Jahr 2stellig, a=10 mit Trennung und Jahr 4-stellig.
FORMAT_vdatum_datea.;
bei a=7 Datumausgabe als ddMMMyy, bei a=9
als ddMMMyyyy.
FORMAT_vdatum_juliana.;
bei a=5 Datumausgabe als yyddd, bei a=7 als
yyyyddd, wobei ddd von 1 bis 365 (bis 366)
reicht.
FREQ
(Procedure) berechnet absolute und relative Häufigkeiten (siehe auch TABLES).
PROC_FREQ_data=dname;
TABLES_vname1;
WEIGHT vname2;
in vname2 können Anzahlen für aggregierte
Beobachtungen angegeben werden
RUN;
PROC_FREQ_data=dname;
ohne Angabe von Variablen werden
Häufigkeitsstatistiken für alle in dname
auftauchenden Variablen ausgegeben
RUN;
FROM
(SQL-Befehl) legt die Quelldatei(en) fest.
FROM_dname1,_dname2
FROM_alias1.dname_AS_alias2 hier können auch alias-Namen vergeben werden;
FROM_(SELECT.....)
die entsprechende Tabelle kann auch durch eine
geschachtelte SELECT-Routine erstellt werden
(WHERE kann auf die darin enthaltenen
Variablen zugreifen)
GCHART (Procedure) erzeugt Säulen-, Balkengrafiken, Histogramme
(Häufigkeitsverteilungen) im Grafikmodus
PROC_GCHART_data=dname;
VBAR_v1_/_discrete
midpoints=a_TO_b
RUN;
GCONTOUR (Procedure) Darstellung von Isolinien einer 3-D-Grafik (X, Y, Z); Projektion
auf die X-Y-Ebene;
GENMOD (Procedure) analysiert mit Verallgemeinerte Linearen Modellen; Daten der
Zielvariable müssen als Anteile (Wertebereich 0 bis 1; sollten dann im Modell
erst als Quotient 'events/trials' berechnet werden), Anzahl oder quantitative
Variable angegeben werden; die Einflußvariablen sind mindestens dichotom,
bzw. ordinal oder (quasi-)stetig; es besteht die Möglichkeit, selbstdefinierte
Link-Funktionen anzugeben (siehe Beispiel 12);
PROC_GENMOD_data=dname;
CLASS_veinfluss;
hier werden die kategorialen Variablen
angegeben, die bei MODEL verwendet
werden.
MODEL_vevents/vtrials=veinfluss;
RUN;
PROC_GENMOD_data=dname;
CLASS_v1;
MODEL_ve/vt=v1_/_obstats
gibt für jede Beobachtung folgende Werte aus:
Wert der Zielvariable, vorhergesagter Modellwert, Wert des linearen Prediktors (LP), Stdfehler des LP, Residuum, untere und obere KIGrenze für den Modellwert.
_dist=bin
gibt die Wahrscheinlichkeitsfunktion für
das Modell an: 'nor' für Normalvtlg., 'bin' für
Binomialvtlg., 'poi' für Poissonvtlg.
_link=logit gibt die Link-Funktion an: 'identity' für eine
exakt angepaßte Funktion, 'logit' für
Logistische, 'log' für Log-, 'probit' für ***,
'cloglog' für ***.
_type1
gibt einen Likelihood-Quotiententest für jeden
Term des Modells (->Devianzen); dazu werden die einzelnen Einflußgrößen nacheinander
(sequentiell) in der angegebenen Reihenfolge
in das Modell aufgenommen; der Vergleich
durch den L-Quot. erfolgt dann jeweils mit
dem vorhergehenden Modell.
_dspace;
bei underdispersion kann diese Option zur
Anpassung der Skalierung genutzt werden;
after the parameter estimates have been
determined, the exponential family scale
parameter is assumed to be given by the
deviance (mit pspace wird Pearson-Chi²
verwendet) divided by the degrees of freedom,
and all statistics are adjusted appropriately
(dies wirkt sich dann auf die
Konfidenzintervalle und p-Werte aus).
MAKE_'tabelle'_out=dname;
erzeugt eine Output-Datei, die die in der
MODEL-Zeile (als Option) spezifizierte
tabelle (oben z.B. obstats) enthält.
RUN;
GFONT (Procedure) zum Betrachten von SAS-Softwarefonts;
GLM
(Procedure) = General Linear Model; bestimmt Parameter für lineare Modelle, die
Abhängigkeiten zwischen einer abhängigen und einer (mehreren ) unabhängigen
Variablen beschreiben; eignet sich besonders für Modelle mit fixen Effekten (im
MODEL-Statement werden hinter dem Gleichheitszeichen alle Effekte aufgeführt,
fixe und zufällige; Variablen mit zufälligen Effekten müssen mit RANDOM extra
benannt werden; bei mindestens einem zufälligen Effekt muß für paarweise
Vergleiche mit MEANS der Nenner für die Berechnung des F-Testwertes
umdefiniert werden: -> Option e=...); kann alle Analysen von PROC ANOVA und
einige dazu; stetige Kovariablen werden im Modell anders als klassifizierende
Variablen behandelt:
Kategorielle Var. (-->βj)
yijk = µ + αi + βj + eijk
mit β1 + ... + βj = 0
Stetige Ko.-Var. (-->βj)
yijk = µ + αi + β*x + eijk
Mit LSMEANS berechnete korrigierte Mittelwerte werden anhand der
Modellparameter geschätzt und würden bei diesen zwei Varianten unterschiedlich
für den Einflußfaktor --> α ausfallen.
testet H0: µ1=µ2=...=µi; vergleicht mehr als zwei Stichproben miteinander
(Stichprobenumfänge können unterschiedlich sein);
Teststatistiken, unterschieden nach dem Typ der Varianzzerlegung
TYPE I
für balancierte Daten;
TYPE III
für unbalancierte Daten (es dürfen aber einzelne
nicht komplett fehlen); auch für balancierte;
TYPE IV
bei komplettem Fehlen einzelner Stichproben
PROC_GLM_data=dname
(where=(v1=Bedingung));
CLASS_vunabhängig;
MODEL_vabhängig=vunabhängig
_/_ss3;
OUTPUT_out=dneu
_residual=v1;
RUN;_QUIT;
PROC_GLM_data=dname;
CLASS_&vmod1;
MODEL_vab=_&vmod2;
RUN;
PROC_GLM_data=dname;
CLASS_vu1 vu2;
MODEL_vab=_vu1_vu2_vu1*vu2;
(oder: MODEL_vab=_vu1|vu2;)
einfaktorielle Varianzanalyse; where
schränkt die verwendeten Gruppen ein.
hier werden alle unabhängigen, kategorialen Einflußvariablen angegeben;
zufällige Effekte müssen hier aufgelistet
werden.
Variablen, die hier genannt werden, aber
nicht bei CLASS oder RANDOM
auftauchen werden wie Kovariablen
behandelt (->Kovarianzanalyse).
bewirkt eine TypIII-Quadratsummenzerlegung.
behält die Residuen, hier als Differenz
zwischen dem Beob-Wert und dem
Stichprobenmittel (für jede Stichprobe
getrennt) und gibt vab und vunab mit aus.
unabhängige Variablen und Modell
wurden vorher als Globalvariable
definiert: siehe %LET.
zweifaktorielle Varianzanalyse mit fixen
Effekten; unabhängige Faktoren vu1, vu2.
vu1 und vu2 benennen die zwei Haupteffekte, die untersucht werden sollen,
vu1*vu2 den Wechselwirkungseffekt.
MEANS_vu1_vu2;
vergleicht getrennt für vu1 und vu2 paardie Mittelwerte der einzelnen Stufen
MEANS_v1_v2_/_tukey_cldiff;
siehe MEANS
LSMEANS_vu1*vu2_/_SLICE=vu2; siehe LSMEANS
RUN;
PROC_GLM_data=dname;
zweifaktorielle Varianzanalyse mit zuCLASS_vu1 vu2;
fälligen Effekten (Testergebnisse gelten
MODEL_vab=_vu1_vu2_vu1*vu2; für eine größere Grundgesamtheit)
RANDOM_vu1_vu2_vu1*vu2_/_test
RUN;
PROC_GLM_data=dname;
zweifaktorielle Varianzanalyse mit geCLASS_vu1_vu2;
mischten Effekten: vu1 ist fix, vu2 ist
MODEL_vab=_vu1_vu2_vu1*vu2; zufällig, daß heißt die Testergebnisse für
RANDOM_vu2_vu1*vu2_/_test
vu2 gelten für eine größere GrundgesamtRUN;
heit).
PROC_GLM_data=dname;
drei-(bzw. mehr)faktorielle VarianzanaCLASS_vu1_vu2_vu2;
lyse
MODEL_vab=vu1_vu2_vu3_
vu1*vu2_vu2*vu3_vu1*vu3_
vu1*vu2*vu3;
Alternative Form der MODEL-Zeile
__ MODEL_vab=_vu1|vu2|vu3;
RUN;
.
PROC_GLM_data=dname;
führt zweifaktorielle hierarchische VarianzanaCLASS_vu1_vu2;
lyse durch (mit vu1=hierarchisch 1. Faktor); hier
MODEL_vab=vu1_vu2(vu1); mit fixen Faktoren; mit entsprechend eingefügter
RUN;
RANDOM....../_test-Zeile wird der Test für zufällige Faktoren abgewandelt (s.o.).
PROC_GLM_data=dname;
CLASS_vu1_vu2;
hier unabhängige Einflußfaktoren
MODEL_vab=vu1_vu2_vu3 vu3 wird hier als Kovariable behandelt
_vu2*vu3;
Wechselwirkung mit der Kovariablen
MEANS_vu2;
berechnet unkorrigierte Mittelwerte, der Einfluß
der Kovariablen (Einflußgröße vu1 ???) wird
nicht herausgerechnet
LSMEANS_vu2;
berechnet korrigierte Mittelwerte, der Einfluß der
Kovariablen vu3 und der Einflußgröße vu1 wird
herausgerechnet.
RUN;
GLOBAL
(Makro-Statement) ordnet einem Variablennamen die Eigenschaft
‚Globalvariable‘ zu. Diese Variablen können dann innerhalb eines Makros durch
%let oder CALL SYMPUT mit Werten besetzt werden und bleiben auch nach
Abschluß des Makros verfügbar.
%GLOBAL_var1_var2_var3;
GOPTIONS definiert Optionen für die Ausgabe im Grafikmodus; muß vor den betrffenden
Grafik-Procedures stehen.
GOPTIONS_reset=all
setzt alle vorherigen Einstellungen auf
Standardwerte zurück.
_gsfname=alias
_gsfmode=replace
_gsfmode=append
_device=aaa
_hsize=xcm
_vsize=ycm
_keymap=winansi
_devmap=winansi;
GOTO
bewirkt die Ausgabe in eine Datei; alias=>siehe
FILENAME.
bewirkt, daß bestehende Dateien überschrieben
werden.
bewirkt,daß in der bestehenden Datei die neue
Information an die alte hinten angehängt wird.
legt Grafikmodus fest; aaa entspricht der
zugehörigen Dateinamenextension (z.B.: wmf).
legt horizontale Grafikgröße in cm fest.
legt vertikale Grafikgröße in cm fest.
ermöglicht die Darstellung von Umlauten
ermöglicht die Darstellung von Umlauten
(Makro-Statement) ermöglicht Sprung zu anderen (mit einer Sprungmarke
gekennzeichneten) Programmzeilen; das Programm wird hinter der Sprungmarke
fortgesetzt.
%GOTO_ende;
................
%ende:
Achtung!!: die Sprungmarkenzeile endet mit
einem Doppelpunkt !
GPLOT (Procedure) erzeugt für zwei Variablen XY-Diagramme mit Punktwolken,
Geraden, Kurven, Regressionsgraden. (siehe auch unter PLOT)
PROC_GPLOT_data=dname;
PLOT_v1*v2;
RUN;
GREPLAY (Procedure) geeignet zur Darstellung mehrerer Grafiken in einer Abbildung und
zum Ablauf von Animationen;
GROUP BY (SQL-Befehl) erzeugt Untergruppen bei der ausgewählten Spalte (Variable); es
werden dabei Zeilen mit gleichlautenden Einträgen (in der spezifizierten
Variable) zusammengefaßt. Bezieht sich auf die Berechnungen (sum, v1+v2,
etc) in der PROC SQL (dadurch Abgrenzung zu Einschränkungen, die mit
WHERE erfolgen)
GROUP_BY_vname
G3GRID (Procedure) interpoliert zusätzliche Datenpunkte für 3-D-Grafiken (X, Y, Z), die
später mit G3D oder GCONTOUR ausgegeben werden; liefert keine Grafiken.
G3D
ermöglicht 3-D-Diagramme mit PLOT oder SCATTER;
PROC_G3D_data=dname;
erzeugt Netzgrafik in XYZ-Diagramm;
PLOT_y*x=z;
RUN;
PROC_G3D_data=dname;
3-D-Scatterplot: Darstellung der Datenpunkte im
SCATTER_y*x=z;
XYZ-Diagramm (Punktwolke, Nadeldarstellung).
RUN;
HAVING
IF
IML
(SQL-Befehl) selektiert Zeilen eines Datensatzes; wird mit KenngrößenAbfragen wie min, max, etc. (für die Auswahlbeschränkung) verwendet (im
Gegensatz zu WHERE) oder mit durch AS neu definierten Variablen verwendet;
HAVING_min(v1)<=10
der nachfolgende Programmteil wird nur unter bestimmten Bedingungen ausgeführt;
wird in DATA-Steps verwendet.
IF_(Bedingung) _THEN_c=d;
ELSE_c=e;
IF_(a=b) _THEN_ DO;
mit einer DO-Schleife können mehrere Befehle
c=d;
unter THEN und ELSE eingebaut werden
f=g;
END;
ELSE_c=e;
IF_var_IN_(a,_b,_c);
die Bedingung ist wahr, wenn var den Wert a, b
oder c annimmt.
IF_(a=b)_THEN_GOTO_p1; wenn die Bedingung wahr wird, springt das
Programm zur Marke p1 (im Programm als Zeile
p1: markiert)
IF_(Bedingung);
in dieser Kurzform wirkt sich die IF-Schleife so
IF_(_N_<a);
aus, daß der gerade bearbeitete Datensatz nur dann
in das Dat-File übernommen wird, wenn die
Bedingung erfüllt ist (im Beispiele nur die
Datensätze, wo obs kleiner 8 ist).
IF_v1;
diese Kurzform fragt nur nach wahr (v1=1 oder
v1^=0) oder falsch (v1=0): die Bedingung ist bei
‚wahr‘ erfüllt.
BY_v1_v2;
IF_FIRST.v1_THEN_c=d;
wird wahr, wenn in der vertikalen Abfolge der
Werte von v1 eine neuer Wert auftaucht (macht nur
Sinn, wenn vorher nach dieser Variable sortiert
wurde); v1 muß vorher mit BY-Statement genannt
werden.
BY_v1_v2;
IF_LAST.v1_THEN_c=f;
(s.o.) wird wahr, wenn der letzte gleiche (wie die
vorhergehenden) Wert von v1 erreicht wird (also
vor einem Wechsel zu einer anderen Ausprägung);
v1 muß vorher mit BY-Statement genannt werden.
(Procedure) ermöglicht die Anwendung der Interactive Matrix Language in SAS;
(Matrizen werden hier in der Beispielsyntax mit m... bezeichnet);
PROC_IML;
USE_dname;
benennt DATA-Set, das hier benutzt werden
soll.
READ_ALL_INTO_m1;
liest dname komplett und in der vorgegebenen
Anordnung in die Matrix m1 ein; dname darf
dann nur numerische Variablen enthalten.
USE_d2_WHERE(Bedingung); schränkt die aus d2 verwendeten Datenzeilen
durch die Bedingung ein.
READ_ALL_VAR{v1_v2_v3}_INTO_m2; schränkt die einzulesenden
Variablen ein.
n=NROW(m1);
übergibt an n die Zeilenanzahl von m1
DO_i=1_TO_b;
Schleifenverwendung ist möglich.
c=m1[z,s];
gibt in c den Wert der z-ten Zeile und s-ten
Spalte der Matrix m1 aus
m2=m1[{z1_z3},{s1_s2}]; gibt in m2 eine Teilmatrix von m1 aus;
jeweilige Zeilen und Spalten sind hier explizit
aufgeführt.
m2=m1[(z1:z2),(s1:s2)];
gibt in m2 eine Teilmatrix von m1 aus; hier als
Zeilen- und Spalten array von m1 angegeben.
vektor1={z1,z2,z3};
vektor2={s1,s2};
m4=m1[vektor1,vektor2];
gibt in m2 eine Teilmatrix von m1 aus; in den
Vektoren ...1 und ...2 wurden vorher die
Zeilen- und Spalten-Nr. explizit angegeben.
END;
CREATE_dn3_FROM_m3;
aus m3 soll die Datei dn3 erzeugt
werden.
APPEND_FROM_m3;
hier werden die aus m3 zu verwendenden
Daten ausgewählt (in diesem Fall alle).
QUIT;
IN
ermöglicht die Angabe einer Liste von Werten für Bedingungen oder vergleichende
Operatoren;
IF_v1_IN_(a,_b,_c);
wird wahr wenn der Wert von v1 gleich a, b
oder c ist.
IN
(für SQL) ermöglicht die Angabe einer Liste von Werten für Bedingungen oder
vergleichende Operatoren in einem WHERE-Statement;
WHERE_v1_IN_(a,_b,_c);
wird wahr wenn der Wert von v1 gleich a, b
oder c ist.
INDEX
(SQL-Befehl) erzeugt einen spaltenbezogenen Index, mit dem eine Beschleunigung
von Such- oder Sortierverfahren; mit UNIQUE wird definiert, und auch bei
zukünftigen Eingaben kontrolliert, daß die angegebenen Spalten zusammen einen
eindeutigen Schlüssel für den jeweiligen Datensatz bilden.
CREATE_INDEX_iname_ON_tname_(sp1, sp2, sp3)
iname =Indexname
CREATE_UNIQUE_INDEX_iname_ON_tname_(sp1, sp2)
INFILE bestimmt eine ASCI-Datei, mit der ein neues Data-Set erzeugt werden soll; es muß
ein INPUT folgen (hier können auch @@ verwendet werden, um Daten aus in der
Quelldatei aufeinanderfolgenden Spalten in eine Spalte im Data-Set einzulesen), bei
dem alle Variablennamen neu vergeben werden müssen.
INFILE_‘pfad\dname‘_firstobs=a
der erste zu lesende Datensatz befindet sich
_obs=b
in der a-ten Zeile, der letzte in der b-ten
Zeile der ASCI-Datei;
_lrecl=a
die Gesamtlänge eines Datensatzes beträgt
a Zeichen.
_pad
_missover
_expandtabs
_dlm=‘x‘;
gibt an, ob der Datensatz bei fehlenden
Werten mit Blanks bis zur Gesamtlänge
(lrecl=..) aufgefüllt ist.
verhindert, daß, wenn im Listenformat
eingelesen wird, bei fehlenden Werten in
eine neue Zeile gewechselt wird; die
fehlenden Werte werden auf missing
gesetzt.
gibt an, daß die Werte im Datenfile durch
tabs getrennt sind.
hier kann ein spez. Zeichen (x) definiert
werden, das im Datensatz die Variablen
trennt.
INNER
(SQL-Befehl) siehe JOIN.
INPUT
liest Variablen ein; (falls das Einlesen mit Hilfe einer DO-Schleife erfolgt, muß
innerhalb der Schleife ein OUTPUT-Befehl erscheinen, um die Werte in das DataSet auszugeben)
INPUT_vname1_vname2;
INPUT_vname_@@;
mit @@ brauchen die Datensätze nicht getrennt in
Zeilen stehen.
INPIUT_va-vb;
dies ist bei durchnummerierten Variablennamen
(durch angehängte Zahl) möglich; es werden Werte
für die Variablen Nr. a bis Nr. b eingelesen.
INPUT_vname1 a-b;
spaltengesteuertes Einlesen: der Wert für vname
wird vom a-ten bis zum b-ten Zeichen eingelesen.
INPUT_@a_v1_b.
formatgesteuertes Einlesen: innerhalb einer Daten_@c_v2_$chard.;
zeile werden beginnend bei Position a (bzw. c) b
Zeichen (bzw. d Zeichen) eingelesen; (Man achte
auf den Punkt nach dem b und dem d bei der
Formatangabe !!)
INPUT_@a_(vb-vc)_(d*f.); beginnend beim a-ten Zeichen werden d-mal (mit
d=c-b+1) f Zeichen in die entsprechend nummerierte
Vaariable v... einglesen.
INPUT_#a_v1_#b_v2_v3;
die Variablen für den einzulesenden Datensatz
stehen in den Zeilen a und b (mit jeder INPUTSchleife wird für a und wieder neu angefangen zu
zählen).
Alphanumerische Variablen: (Man achte auf den Punkt nach dem a bei der
Formatangabe !!)
INPUT_vname1$_vname2$;
INPUT_vname$a.;
liest Variablen, die aus a Zeichen bestehen und
beliebig viele Leerzeichen enthalten können.
INPUT_vname$:a.;
liest Variablen, die aus a Zeichen bestehen und keine
Leerzeichen enthalten.
INPUT_vname$&:a.;
liest Variablen, die aus a Zeichen bestehen und
einfache Leerzeichen enthalten
INPUT_vname_&_$;
liest einfache Leerzeichen mit ein; die Einträge
müssen durch doppelte Leerzeichen getrennt
werden.
INSERT (SQL-Befehl) schreibt neue Datensätze in schon bestehende Tabellen; es müssen
Einträge für alle Spalten der Tabelle angegeben werden; es wird dann der 1. Eintrag
in die 1. Spalte geschrieben usw.
INSERT_INTO_tname_VALUES_('Text1', 'Text2', wert1, wert2);
INSERT_INTO_tname(sp1,sp2)_VALUES_(wert1, wert2)
VALUES_(wert3, wert4);
INSERT_INTO_tabneu(sp1,sp2,sp3)_SELECT_sp4, sp5, sp6_FROM_tabalt;
JOIN
(SQL-Befehl) erstellt neue Tabellen durch Verknüpfung von Zeilen aus
verschiedenen Tabellen; mit ON wird dabei eine Schlüsselvariable definiert, über
die eine Zuordnung der Zeilen aus verschiedenen Tabellen erfolgt (die Variable
muß in allen zu verknüpfenden Tabellen vorkommen).
SELECT_*_FROM_
gibt alle möglichen Zeilenverknüpfungen von t1 und
t1_INNER_JOIN_t2_
t2 aus, wo t1.v1 und t2.v1 übereinstimmen; die übriON_t1.v1=t2.v1;
gen Zeilen werden nicht ausgegeben; alle Spalten
aus t1 und t2 werden beibehalten.
SELECT_*_FROM_
wie oben, gibt aber auch alle Zeilen aus t1 ohne
t1_LEFT_JOIN_t2_
Übereinstimmung mit aus (ergibt dann missing
ON_t1.v1=t2.v1;
values in den von t2 übernommenen Spalten)
SELECT_*_FROM_
wie oben, gibt aber alle Zeilen aus t2 ohne
t1_RIGHT_JOIN_t2_
Übereinstimmung mit aus (ergibt dann missing
ON_t1.v1=t2.v1;
values in den von t1 übernommenen Spalten)
SELECT_*_FROM_
wie oben, gibt aber alle Zeilen aus t1 und t2 ohne
t1_FULL_JOIN_t2_
Übereinstimmung mit aus (ergibt dann missing
ON_t1.v1=t2.v1;
values in den jeweils übrigen Spalten)
KEEP
überträgt nur die angegebenen Variablen (Spalten) in den Data-Set
KEEP_v1_v2;
übernimmt nur die Variablen v1 und v2
LABEL vergibt Label für Variablen;
LABEL_v1="Bezeichnung1"
_v2="Bezeichnung2"
_v3="Bezeichnung3";
LEGENDa definiert Legende Nr.a für eine Grafik; die Zuordnung zur betreffenden Grafik
erfolgt mit dem Befehl PLOT.
LEGENDa_value=(‘n1’_’n2’) legt die Namen für die unterschiedenen Fälle fest.
_label=(‘name’)
Übergeordneter Name der gezeigten Fälle.
_frame;
erzeugt einen Rahmen um die Legende.
LENGTH legt die maximale Länge eines Eintrages für eine Variable fest; im DATA-Step;
LENGTH_vname_a;
a gibt die Länge der Variable in Bytes an.
LENGTH_v1_v2_a;
LET
definiert Global-/Makrovariablen; v1 kann dann als &v1 im späteren
Programmablauf aufgerufen werden; in einem Dateiaufruf für ein SAS-Dataset
kann in &v1 der Dateiname und/oder der Libname enthalten sein.
Achtung: wenn in der %LET..-Zeile rechts vom ‘=‘ Operatoren oder Funktionen
auftauchen, die beim Aufruf der G.variable ausgeführt werden sollen, um den zu
übergebenden (Text-)Inhalt der G.-variable zu erzeugen, dann muß in einem
DATA-Step der G.-var.-Aufruf ohne doppelte Hochkommas erfolgen (sonst wird
der dort stehende Funktionstext komplett übergeben); neue, aus mehreren
Teilstrings zusammengesetzte Variablennamen können mit Funktionen in dieser
Form nicht erstellt werden.
%LET_v1=a;
%LET_vmod1='vu1_vu2';
übergibt Text mit Hochkommas
%LET_vmod2='vu1_vu2_vu1*vu2';
%LET_v1=‘text1‘||‘text2‘;
v1 wird aus text1 und text2 zusammengesetzt.
%LET_v1=“&v3“||‘text2‘;
v1 wird aus dem Inhalt der Globalvariable
v3 und text2 zusammen-gesetzt (beachte
doppelte Hochkommas).
%LET_v1=put(“&v3“,_$chara.)||‘text3‘; der Inhalt der Globalvariable v3 wird vor
dem Zusammenfügen auf einen String der
Länge a Zeichen gebracht (!! beachte ‘.‘
hinter a !!).
LIBNAME
Ermöglicht die Vergabe von ‚alias‘-Namen für Datei-Libraries, die jeweils
einem bestimmten Unterverzeichnis zugeordnet sind; dabei können ‚Engines‘
(z.B. verschiedene SAS Versionen, SPSS, etc.) definiert werden; falls sich im
selben Verzeichnis SAS-Datendateien von verschiedenen SAS-Versionen
befinden, muß für jede Version ein separater Libname eingerichtet werden; nur
SAS-Datendateien, die während des Programmablaufs unter einem Libname
angelegt werden, bleiben nach dem Schließen von SAS erhalten.
LIBNAME_alias_“pfad“;
pfad gibt den kompletten Pfad für das
entsprechende Unterverzeichnis an.
LIBNAME_alias_engine_“pfad“;
LIBNAME_libref_V6_“pfad“;
ermöglicht den Zugriff auf Datendateien
der Version SAS 6...
LIBNAME_alias_SPSS_“pfad\datei.por“; zum Einlesen von SPSS-portableDATA_neu;
Datendateien (nur diese SPSS-Dateien
SET_alias._first_;
sind verwendbar !!!); der Libname
RUN;
verweist direkt auf die Datei! mit _first_
wird auf die erste SPSS-Tabelle
verwiesen.
LOGISTIC
(Procedure) testet logistische Modelle; kann bei der Zielgröße nur binärcodierte Variable und bei den Einflußgößen nur quantitativ-stetige oder binärcodierte Variablen bearbeiten (bei kategorialen Variablen mit >2 Faktorstufen
ist eine Umcodierung in dichotome Dummyvariablen notwendig: die
adjustierten oddsratios beziehen sich dann im Chancen-Vergleich immer nur
auf die nicht explizit umcodierte (Kontroll- bzw- Referenz-)Stufe der
Ursprungsvariable)..
Syntax-Hinweis: im MODEL-Statement kann ' | ' für die Verknüpfung der
Einflußgrößen nicht verwendet werden.
Wichtig: PROC LOGISTIC erwartet normalerweise aufsteigende Kodierungsreihenfolge, wobei die Kontrollen den höheren Wert haben (also z.B. Fälle=1
und Kontr.=2); daher bei Fall=1, Kontr.=0 die Option descending verwenden!
PROC_LOGISTIC_data=dname
_descending;
MODEL_vres=vu1_vu2_/
_link=....
_rl
_alpha=a;
RUN;
PROC_LOGISTIC_data=dname;
MODEL_vev/vges=vu1_vu2;
dreht die Codierungsreihenfolge der
dichotomen Zielvariable um.
vres = Response-Variable (dichotom); vu1
und vu2 = unabhängige Einflußvariablen.
die Link-Funktion kan hier spezifiziert
werden: ...=logit (default), ...=cloglog,
...=normit;
(risklimits) gibt Konfidenzintervalle für
die Odds-Ratios aus.
bestimmt den alpha-Fehler mit 0<a<1.
vev = Anzahl der positiven events; vges =
Gesamtanzahl der positiven und negativen
events ; vu1 und vu2 = unabhängige
Einflußvariablen.
RUN;
PROC_LOGISTIC_data=dname;
MODEL_vres=vu1_vu2;
FREQ
WEIGHT
RUN;
LSMEANS
führt mit zusätzlichen Optionen paarweise Mittelwertvergleiche (Test) durch
(diese Tests sind bei zufälligen Effekten nicht sinnvoll); kann auch für
unbalancierte Daten verwendet werden; gibt korrigierte Mittelwerte aus, wenn
z.B. Kovariable im Model mit berücksichtigt wird; korrigierte Mittelwerte
werden anhand der geschätzten Modellparameter berechnet (siehe PROC
GLM); führt F-Tests auf Gleichheit der Effekte verschiedener Stufen von
Faktor A für verschiedene Stufen von Faktor B durch (-> zweifaktorielle
Varianzanalyse)
LSMEANS_vu1*vu2_/_SLICE=vu2;
testet die H0 "die Effekte aller Stufen von vu1 sind gleich Null" mit
einem F-Test für verschiedene Stufen von vu2.
LSMEANS_v1_/_pdiff=all
spezifiziert, welche Gruppen miteinander
verglichen werden; hier: jede mit jedem.
=control('name') gibt die Gruppe an, mit der alle anderen
verglichen werden, z.B. für zweiseitigen
Dunnett-Test-Option; name gibt den
Eintrag in der Spalte der
Klassifizierungsvariable an, der
die(Kontroll-)Gruppe klassifiziert.
=controlu('name') einseitiger Test bei Vergleich mit einer
(Kontroll-)Gruppe (name: s.o.); es sollen
Abweichungen von der Kontrolle nach
oben (u=upper) bewiesen werden (also
H0: µ1<=µi mit µ1 von Kontrolle);
=controll('name') einseitiger Test bei Vergleich mit einer
(Kontroll-)Gruppe (name: s.o.); es sollen
Abweichungen von der Kontrolle nach
unten (l=lower) bewiesen werden (also
H0: µ1<=µi mit µ1 von Kontrolle);
_adjust=tukey
spezifiziert Adjustierungsmethode
fürpaarweisen Vergleich der Mittelwerte; hier:
Tukey
=dunnett Adjustierung nach Dunnett; bei Verglei-chen
mit nur einer Kontrollgruppe; siehe auch Option
pdiff.
=t
führt einen multiplen t-Test (ohne Adjustierung)
zum lokalen Niveau α durch.
=bon
multipler paarweiser Vergleich mit BonferoniAdjustierung des multiplen Niveaus.
_e=va*vb
gibt für die F-Statistik einen vom Normalfall
abweichenden Nenner (hier die mittlere
Quadratsumme für va*vb) für die Berechnung
des F-Testwerts an; wird bei PROC GLM für
Dunnett benötigt.
_cl
gibt Konfidenzintervalle für Mittelwerte aus
_alpha=a;
_t
legt das Signifikanzniveau auf a fest.
führt multiplen t-Test mit paarweisen
Vergleichen zum lokalen Niveau α durch; gibt
T-Wert und Probability aus.
MACRO Definiert ein Unterprogramm/Macro; diese können gespeichert werden; der
Dateiname muß mit dem Macronamen übereinstimmen; mit %IF, %THEN, %DO,
%END können Gruppen von Anweisungen/Procedures bedingt ausgeführt werden;
innerhalb von eingefügten DATA-Steps oder Procedures oder wenn das Makro aus
einer Procedure oder DATA-Step heraus aufgerufen wird, werden die (Schleifen)Befehle ohne % verwendet; Variablen werden innerhalb des Macros grundsätzlich
als Text (string) eingelesen. (siehe angehängtes Beispiel 1a und 1b).
Im Programmablauf muß erst die Macro-Syntax abgearbeitet werden, bevor das
Macro funktional aufgerugen werden kann.
Bei der Verwendung von Makros innerhalb von SQL muß darauf geachtet werden,
daß “;“ in dem Makro zum Abbruch/Ende der SQL-Prcedure führen.
%MACRO_mname(mv1=_, mv2=_, mtext=_); das Macro wird erst durch den
Aufruf %mname ausgeführt (s.u.); der Aufruf
übergibt dabei die angegebenen Bezeichnungnen
(Strings) an die Macrovariablen mv1 und mv2,
bzw. den ‘text‘ an mtext; innerhalb des Macros
werden die M.-variablen dann mit &... aufgerufen; am Ende des Makros werden die Werte der
M.-variablen wieder an die ursprünglichen zurück
gegeben. (siehe Beispiel 1c)
PROC_...._data=&mv1;
VAR_&mv2;
innerhalb des Macros muß mv2 mit dem Präfix &
versehen werden.
RUN;
%MEND_mname;
beendet das Unterprogramm/Macro.
Aufruf des Macros:
sollte im Prrogrammtext in der Reihenfolge nach
der Syntax des Makroprogramms stehen (SAS
muß die Makrosyntax erst gelesen haben)
%mname(mv1=dname,_mv2=vname, mtext=‘text‘); in dieser Form werden den
Macrovariablen die Strings direkt zugewiesen
(s.o.).
%mname(dname,_vname; ‘text‘); es können auch nur die zu übergebenden
Werte/Texte angegeben werden; dann muß hier
aber die Reihenfolge genau mit der in der
%MACRO...-Zeile übereinstimmen.
%INCLUDE_‘pfad\mname.sas‘; liest das Macro mname in den Programmtext ein
MEANS (Procedure) ermöglicht die Berechnung verschiedener Kennzahlen von
Einstichproben; Voreinstellung ist n, mean, std dev, min, max; darüber hinaus muß
einzeln aufgerufen werden: hier wird das Ergebnis als Datei abgespeichert und
kann dann erst auf den Bildschirm ausgegeben werden
PROC_MEANS_data=dname;
VAR_v1_v2;
RUN;
PROC_MEANS_data=dname; mit OUTPUT könne die Ergebnisse in einer Datei
VAR_v1_v2;
abgespeichert werden;
ID_v3_v4;
übernimmt die Werte von v3 und v4 aus dname
OUTPUT_out=dname
Dateiname der Ausgabedatei
_n=v11_v21
Anzahl der Beobachtgn., getrennt für v1 und v2
_nmiss=v12_v22 fehlendeWerte, getrennt für v1 und v2
_mean=v13_v23
Mittelwert, getrennt für v1 und v2
_std=v14_v24
Standardabweichung, getrennt für v1 und v2
_min==v15_25
Minimum, getrennt für v1 und v2
_max=v16_v26
Maximum, getrennt für v1 und v2
_var=v17_v27
Varianz, getrennt für v1 und v2
_sum=v18_v28;
Summe, getrennt für v1 und v2
RUN;
MEANS berechnet und vergleicht Mittelwerte zu verschiedenen Gruppen einer Variable, die
durch eine Klassifizierungsvariable differenziert werden; funktioniert nur mit
balancierten Daten korrekt ! (bei unbalancierten Daten LSMEANS verwenden);
gibt keine korrigierten Mittelwerte aus; Verwendung z.B. in PROC ANOVA oder
PROC GLM; muß nach dem MODEL-Statement kommen; führt mit zusätzlichen
Optionen paarweise Mittelwertvergleiche (Test) durch (ist bei zufälligen Effekte
nicht sinnvoll);
MEANS_vname
berechnet die Mittelwerte für die einzelnen Klassen von
vname
MEANS_v1_/_tukey
führt einen Tukey-Test (mit Adjustierung) auf paarweise
_alpha=a Unterschiede zwischen den Mittelwerten durch (α=a gilt
_cldiff;
dann für das gesamte Experiment); (H0:µ1=µ2); cldiff
gibt das simultane Vertrauensintervall an.
MEANS_v1_/_bon;
multipler paarweiser Vergleich mit BonferoniAdjustierung des multiplen Niveaus.
MEANS_v1_/_dunnett('name')
führt einen multiplen Test nach Dunnett durch; hier
werden alle Stichproben mit einer Kontrollgruppe (durch
'name' spezifiziert) verglichen (H0:µk=µ2); (α=0.05 gilt
für alle Vergleiche simultan).
_e=va*vb; gibt für die F-Statistik einen vom Normalfall
abweichenden Nenner (hier die mittlere Quadratsumme
für va*vb) für die Berechnung des F-Testwerts an; wird
bei PROC GLM für Dunnett benötigt.
MEANS_v1_/_t;
führt einen multiplen t-Test (ohne Adjustierung) zum
lokalen Niveau α durch.
MEANS_v1_/_sidak;
führt einen multiplen t-Test mit Adjustierung durch
(H0:µ1=µ2); (α=0.05 gilt dann für das gesamte
Experiment).
MEANS_v1_/hovtest=bartlett;
Homoskedastizitätstest nach Bartlett;
verwendet Varianzen (vom Mittelwert) -> Ausreißer
empfindlich; wird in der Regel nicht verwendet.
MEANS_v1_/hovtest=bf; testet auf Homoskedastizität (Gleichheit der Varianzen)
verschiedener Stichproben (eine Normalverteilung der
Varianzen ist hier nicht Voraussetzung); führt einen
modifizierten Levene-Test nach Brown und Forsythe
durch (-> bei PROC GLM); von den hier möglichen der
beste Test.
MEANS_v1_/hovtest=levene_(type=square)
...=abs);
testet auf Gleichheit der Varianzen bei versch.
Stichproben (Homoskedastizitätstest nach Levene);
berücksichtigt die (quadrierten oder absoluten)
Abweichungen vom Median und ist daher robuster gegen
Ausreißer (Original-Levene ist mit absoluten
Differenzen).
MERGE Verknüpfungen von Beobachtungen aus verschiedenen Data-Sets zu einem neuen
Data-Set; im DATA-Step; bei der Verwendung von BY sollten außer den BYVariablen keine Variablennamen bei den Dateien übereinstimmen; (siehe auch
Beispielprogramm 4 und zugehörige Erklärungen).
MERGE_dname1_dname2;
One-to-one: erster Datensatz aus dname1 wird mit
erstem Datensatz aus dname2 verknüpft, usw.
MERGE_dname1_dname2; Match: es werden die Datensätze miteinander
BY_vname;
verknüpft, bei denen vname übereinstimmt; hier
müssen vorher beide Dateien dname1 und dname2
mit PROC SORT nach der Variable vname sortiert
werden.
MERGE_d1_(firstobs=a)
firstobs legt Anfangsdatensatz in der jeweiligen
_d2_(firstobs=b);
Datei fest.
DATA_dneu;
es werden nur die Datenzeilen an dneu
MERGE_d1(in=in1)_d2(in=in2);
übergeben, die in v1 bei d1 und d2 gleiche
IF_in1_AND_in2;
Werte aufzeigen (in1 ist eine Variable, die
BY v1;
wahr oder falsch, also 0 oder 1 sein kann;
RUN;
IF in1.. ist gleichbedeutend mit IF in1=1...
DATA_dneu;
MERGE_d1(in=in1)_d2(in=in2);
IF_in1_AND_NOT_in2;
übergibt nur Zeilen von d1, die in v1
BY_v1;
keine Übereinstimmung mit d2 haben.
RUN;
Ein Verfahren, um einzelne Zeilen an alle Datensätze anzuhängen (ohne MERGE):
SET_d1;
(in einem DATA-Step) d2 besteht nur aus einer
IF_(_N_=1)_THEN_SET_d2; Datenzeile; der erste Durchlauf der DATA-Schleife
liest die erste Zeil von d2 ein und hängt diese an die
erste von d1; bei folgenden Durchläufen behält SAS
die Werte aus d2 und hängt sie an alle folgenden
Zeilen von d1 an.
MIXED (Procedure) für gemischte Modelle; im MODEL-Statement werden hinter dem
Gleichheitszeichen nur die (Variablen mit) fixen Effekte aufgeführt; im RANDOMStatement werden die zufälligen Effekte angegeben; hier werden die Nenner bei der
Berechnung des F-Testwert automatisch korrekt ausgewählt;
testet H0: µ1=µ2=...=µi; vergleicht mehr als zwei Stichproben miteinander
(Stichprobenumfänge können unterschiedlich sein);
PROC_MIXED_data=dname;
hier: zweifaktorielle Varianzanalyse mit
CLASS_vu1_vu2;
zufälligen Effekten (Testergebnisse gelten
MODEL_vab=_;
für eine größere Grundgesamtheit)
RANDOM_vu1_vu2_vu1*vu2;
RUN;
PROC_MIXED_data=dname_nobound;
die Option verhindert, daß das
Modell bei negativen Varianzkomponenten
automatisch von SAS verändert wird.
CLASS_vu1_vu2;
MODEL_vab=vu1_vu2
_ddfm=satterthwaite;
bewirkt die Verwendung gewogener FG
bei der Auswahl des t-Quantils für die
bestimmung der Konfidenzintervalle von
Mittelwerten (bei mehrfaktoriellen
Anlagen eine Adjustierung, da bei den
Schätzungen verschiedene/zusätzliche
Fehlerterme auftauchen)
LSMEANS_vu1_/_cl;
RUN;
MODEL wird in verschiedenen Procedures (siehe dort: ANOVA, CATMOD, GENMOD,
GLM, MIXED, PROBIT, REG, PHREG) zur Spezifikation einer Modellannahme
verwendet;
NOTE
definieren eines Textes für die Ausgabe; kann nur innerhalb einer Procedure
erfolgen;
NOTE_c=blue
color; Farbe des Textes
_f=swissl
fond; verwendete Schriftart (hier swissl').
_h=a_pct
height; Textgröße; pct=Größenangabe in Prozent
(percent).
_move=(10,95)_pct`; positioniert den Text mit prozentualen (pct=percent)
X-, Y-Koordinaten.
NPAR1WAY (Procedure) hier ist der Rangsummentest nach Wilcoxon implementiert
(verteilungsfreier Test); Vergleich der Mediane zweier Stichproben; die
Werte beider Stichproben müssen in einer Spalte stehen; H0: die Mediane
sind gleich.
PROC_NPAR1WAY_data=dname_wilcoxon; die zwei Stichproben werden mit
CLASS_vname;
vname unterschieden.
VAR_vabhängig;
RUN;_QUIT;
ON
(SQL-Befehl) siehe JOIN.
OPTIONS
hiermit können verschiedene Grundeinstellungen für den Ablauf und die
Ausgabe des SAS-Programms definiert werden; die eingesstellten Optionen
können auch im Options-Fenster (Aufruf z.B. über die Command-Zeile)
eingesehen werden.
OPTIONS_nofmterr
hiermit können SAS-Programme zum Laufen
gebracht werden, deren notwendige Formatdatei
fehlt.
nonumber
unterdrückt die Seitennummerierung im Output
nodate
unterdrückt die Datumangabe beim Output
ORDER BY (SQL-Befehl) sortiert Datensätze
ORDER_BY_v1,_v2_desc
sortiert die Datensätze nach v1 aufsteigend (defaultEinstellung; kann auch mit asc festgelegt werden)
und nach v2 absteigend
OUTER (SQL-Befehl) siehe UNION.
OUTPUT
erzeugt die Ausgabe eines Datensatzes (= einer Datenzeile) in ein Data-Set
OUTPUT_dname;
optional kann der Name der Zieldatei (in der DATAZeile genannt) angegeben werden.
PHREG (Procedure) eigentlich für Überlebenszeitanalysen mit dem Cox-Modell; kann
durch spezifisch getrickste Anwendung auch für die logistische Regression bei
gematchten Fall-Kontroll-Studien (Matching-Verhältnis 1 :1, 1 : n, m : n) benutzt
werden; die Response-Variable (vresp) muß >0 codiert sein, wobei die Kontrollen
gegeüber den Fällen den größeren Wert haben sollen; über die Censor-Variable
(vcens) wird die Fall=1, Kontrolle=0 Codierung wieder eingebracht;
(Syntax hier für gematchte Fall-Kontroll-Studie)
PROC_PHREG_data=dname;
MODEL_vresp*vcens(a)=v1_/ vresp wird zensiert, wenn zugehöriges vcens
den Wert a hat (hier a=0 für Kontrolle).
_ties=discrete
discrete bewirkt, daß das Proportional Hazard
Model durch das Discrete Logistic Model
ersetzt wird; kann für alle Matchingverhältnisse verwendet werden.
...=breslow
wenn keine Bindungen (ties) vorliegen (1 : 1
oder 1 : n), ist breslow am effektivsten.
_selection=....
_rl;
STRATA_vstrat;
spezifiziert die Methode, nach der relevante
Modelkomponenten selektiert werden: none,
backward, forward, stepwise, score.
gibt Konfidenzintervalle für die geschätzten
Parameter (Odds-Ratios) aus.
vstrat differenziert die gematchten Gruppen (1
Fall + n Kontrollen); jede Gruppe ist ein
Stratum.
RUN;
(Syntax hier für Cox-Modellierung von Überlebenszeiten: Proportional Hazard
Modell)
PROC_PHREG_data=dname;
MODEL_time*vcens(a)=v1_/ time enthält die Überlebenszeit; vcens zeigt
mit dem Wert a an, dass diese Beobachtung
zensiert wurde, dass das Zielereignis in der
angegebenen Zeit also nicht aufgetreten ist.
_selection=....
spezifiziert die Methode, nach der relevante
Modelkomponenten selektiert werden: none,
backward, forward, stepwise, score.
_rl;
gibt Konfidenzintervalle für die geschätzten
Parameter (Odds-Ratios) aus.
STRATA_vstrat;
vstrat differenziert Strata; when the
STRATA_vstrat(5,10,20);
proportional hazards assumption isn't realistic
for all the data, then it may be appropriate to
perform a stratified analysis in which each
strata contributes a component to the overall
likelihood. The STRATA statement names the
variables whose values are to determine the
stratum levels. The unique values of the
STRATA variables determine the strata if
these variables are character or numeric and
there is no list. If a list is supplied, then the
strata are determined by the intervals defined
by the cutpoints on the list.
BASELINE_out=dneu
hier können für bestimmte Werte der
_covariates=dwerte Covariablen (die Datei, die die entsprechenden
Werte(-vektoren) enthält, wird mit der Option
covariates angegeben; die Datei muss vorher
erzeugt werden; werden keine Werte vorgegeben, benutzt SAS automatisch die Mittelwerte der Beobachtungen zu den jeweiligen
Variablen) jeweils getrennt Überlebenszeiten
_ survival=vname
(der Name der Ausgabevariabel wird mit
survival=.... angegeben) geschätzt werden, die
dann mit PROC GPLOT dargestellt werden
können;
_/_nomean ;
verhindert die Ausgabe von Überlebenszeiten
zu den jeweiligen Mittelwerten der
Einflußvariabeln.
RUN;
PLAN
(Procedure) erzeugt eine zufällige Reihenfolge von Beobachtungseinheiten (bei
vorgegebener Anzahl der Einheiten);
PROC_PLAN_seed=a;
Option seed setzt einen Startwert (a) für Zufallsgenerator; muß zwischen 0 und 2147483647 liegen.
FACTORS_v1=b
b gibt die Anzahl der Beobachtungseinheiten an;
_ordered bewirkt keine Randomisierung z.B. für Blockfaktor;
_random; erzeugt randomisierte Anordnung der Zahlen 1 bis b.
RUN;
PROC_PLAN_seed=&vg;
hier wird die Global-/Makrovariable vg eingesetzt
FACTORS_v1=b_ordered erzeugt innerhalb der b Gruppen eine zufällige
_v2=c_random; Reihenfolge der Zahlen 1 bis c; v2 ist v1
OUTPUT_out=dname;
hierarchisch untergeordnet.
RUN;
PLOT
(Procedure) erzeugt X-Y-Grafiken im Textmodus.
PLOT
erzeugt X-Y-Grafiken in Procedure PLOT oder GPLOT
PLOT_y*x_=_vname;
y=abhängige Variable; die Datenpunkte werden
nach der Variable vname farblich differenziert.
PLOT_y*x_/_frame
erzeugt einen Rahmen um die Grafik.
_vref=0
erzeugt bei 0 eine horizontale Referenzlinie.
_href=0
erzeugt bei 0 eine vertikale Referenzlinie
_chref=color
color gibt die Farbe der vertikalen Ref.-linie an.
_lhref=a;
a legt den Linientyp der vertikalen Ref.-linie fest.
PLOT_y1*x1_y2*x2;
erzeugt zwei getrennte Diagramme.
PLOT_ y1*x1_y2*x2_/_overlay; legt beide Kurven in ein Diagramm.
PLOT_y1*x1=a_y2*x2=b;
weist den Daten die Grafik-Definitionen von
SYMBOLa bzw. b zu.
PLOT_y1*x1=v1;
zeichnet mehrere Kurven, deren Werte nach der
Klassifizierungsvariable v1 unterschieden
werden.
PRINCOMP (Procedure) führt Hauptkomponentenanalyse (Principal Component Analysis;
PCA) durch; es werden Eigenvektoren für die PC und Wichtungsfaktoren für die
Originalvariablen (bezüglich der PC) ausgegeben; falls Korrelationsmatrizen als
Rohdaten verwendet werden, muß dies über eine im DATA-Step entsprechende
spezifizierte Datei geschehen.
PROC_PRINCOMP_data=dname
_cov
so verwendet SAS die Covarianzmatrix; default
ist die Korrelationsmatrix.
_out=d1
schreibt die Werte der Originalvaraiblen und die
Hauptkomponenten- Scores für die einzelnen
Beobachtungen in die Datei d1.
_outstat=d2; schreibt zugehörige Statistik (Mittelwert,
Standardabweichung, Anzahl der Beobachtungen, Kovarianz- oder Korrelationsmatrix,
Eigenwerte, Eigenvektoren/Hauptkomponenten)
in Datei d2.
VAR_v1_v2_v3;
RUN;
PRINT
(Procedure) erzeugt eine Ausgabe auf dem Bildschirm (im out-Fenster)
PROC_PRINT_data=dname;
RUN;
PROC_PRINT_data=dname;
VAR_v1_v2;
gibt nur die Variablen v1, v2 aus.
WHERE_Bedingung;
gibt nur die Datensätze aus, wo die Bedingung
erfüllt ist.
RUN;
PROBIT (Procedure) macht Probit-Analysen zu Dosis-Wirkungs-Beziehungen; betrachtete
Modelle sind 1.) Φ−1 (p(d))= α + β ∗ log (d) mit vres'=p(d) (= relative Häufigkeit
von vres in einer durch vlog spezifizierten Gruppe; vres = Reaktion, z.B. durch 0
und 1) und vlog=log(d) und d=applizierte Dosis (Φ−1 wird automatisch von PROC
PROBIT durchgeführt; Φ−1 ist Default).
Die PROBIT-Prozedur berechnet maximum-likelihood Schätzer der Parameter b
und C der Probitgleichung. Dabei kommt ein modifizierter Newton-Raphson
Algorithmus zum Einsatz. Für eine binäre Zielgröße Y lautet die Probitgleichung
p = P(Y = 0) = C + (1 – C)F(x`b)
F
eine Verteilungsfunktion(normal, logistisch, Gompertz).
x
der Vektor der unabhängigen Variablen (Einflußgrößen).
p
die Reaktionswahrscheinlichkeit.
C
die natürliche (spontane) Reaktionsrate.
Die Wahl der Verteilungsfunktion F (normal für das Probit-Modell, logistisch für
das Logit-Modell und Gompertz für das Gompit-Modell).
(Siehe auch Datei 'probit.doc' !!!).
PROC_PROBIT_data=dname;
CLASS_vres;
MODEL_vres=vlog;
BY_v1;
OUTPUT_out=dneu;
WEIGHT_v2;
RUN;
PUT
zum Erzeugen einer Datenzeile in einem ASCI-File (in einem _null_-DataStep);
DATA__null_;
SET_dname;
FILE_dneu;
PUT_v1_a-b_v2_c-d_@k_(ve-vf)_(g*h.); der Inhalt von v1 wird auf die
Position a bis b geschrieben, von v2 auf c bis d; die
Variablen ve bis vf werden beginnend an Position k
sukzessive jeweils mit der Länge h in den Datensatz
geschrieben (wobei g = f-e+1); !! man achte auf den
Punkt nach dem 'h' Æ Formatanweisung!!
PUT_@a_v1_$charn._@b_‘09‘x_@c_v2_d.e;
Struktur je Variable: Position_Variable_Format
a, b, c geben Positionen in der Datenzeile an; v1
wird als Character mit n Zeichen ausgegeben; ‘09‘x
bewirkt eine Tab-Trennung zwischen den Variablen
und wird als ein Zeichen gezählt; v2 wird as Zahl
mit max.d Zeichen und max. e Nachkommastellen
ausgegeben.
RUN;
PUT
für den Output im Outputfenster; ermöglicht eine genaue Plazierung des Qutputs
von Variablenwerten oder Texten innerhalb einer Zeile;
PUT_@a_var1_@b_"text";
beginnt mit der Ausgabe des Variablen
wertes von var1 auf Position a, mit der
Ausgabe von text auf Position b der
gleichen Zeile.
PUT_@a_"Zeile1"_/_@a_"Zeile2";
'/' bewirkt einen Zeilenwechsel Æ neue
Zeile.
PUT
(Makro-Statement) erzeugt einen Output im log-Fenster.
%PUT__all_;
_all_ gibt alle zur Zeit definierten System- und
Globalvariablen mit ihren Werten aus.
%PUT__global_;
_global_ gibt alle zur Zeit definierten
Globalvariablen mit ihren Werten aus.
RANK
(Procedure) vergibt Ränge; um sich die Rangdaten anzusehen (oder weiterzuverwenden?) müssen die Daten in eine neue Dati geschrieben werden;
PROC_RANK_data=dname_out=dneu; ersetzt die Werte von vname durch entVAR_vname;
sprechende Rangdaten.
RUN;
PROC_RANK_data=dname_out=dneu; schreibt die Rangdaten zur Variable
VAR_vname;
vname in die zusätzliche Variable vneu.
RANKS_vneu;
RUN;
RANKS schreibt Rangdaten (zu Werten die vorher mit VAR spezifiziert wurden: siehe
PROC RANK) in eine neue Variable;
RANKS_vneu;
READ_ALL_INTO siehe IML (Procedure)
REG
führt einfache lineare oder multiple Regression durch; nur für metrisch
intervallskalierte Variablen; der Output enthält die geschätzten Parameter und die
Ablehnungswahrscheinlichkeiten für das verwendete Model und die einzelnen
Parameter; mit BY kann eine Klassifizierungsvariable angegeben werden => für
jede Klasse wird dann eine Regressionsanalyse durchgeführt..
PROC REG_data=dname;
v2 ist die unabhängige, v1 die abhängige Variable;
MODEL_v1_=_v2_/_selection=adjrsq;
Selektion des besten Modells nach
Gütemaß; hier nach dem
adjustierten r².
OUTPUT_out=dneu
_predicted=vh1 Schätzwerte (y-Dach) für y-Werte (hier v1)
_residual=vh2
berechnet Residuen
_press=vh3
berechnet Steichungsresiduen
_dffits=vh4;
berechnet Maß für den Einfluß des einzelnen Wertes
auf das Modell (z.B. Lage, Steigung der Reg.gerade) (siehe Sachregister).
RUN;
RENAME weist in einem DATA-Step einer Variablen einen neuen Namen zu
RENAME_valt1=vneu1_valt2=vneu2;
REPORT (Procedure) zur definierten Ausgabe von Einzelwerten in Tabellenform;
PROC_REPORT_data=dname
_headline
fügt eine durchgezogene Linie unter den
Spaltenüberschriften ein.
_headskip
fügt eine Leerzeile unter 'headline' ein.
_missing
missings werden als Werte behandelt
_split='t'
legt t alsTrennzeichen fest.
_nowd;
unterdrückt ein extra-Fenster für REPORT.
COLUMN_v1_v2_v3;
benennt die auszugebenden Variablen aus dname.
BREAK_AFTER_v1;
setzt verschiedene Trennungen, Zusammenfassungen in der Vertikalabfolge der Daten
DEFINE_v1_/_order
definiert das Spaltenlayout für die einzelnen
Variablen; hier wird nach Größe der Einträge
aufsteigend sortiert ausgegeben.
_order=....; ermöglicht die Definition einer anderen Sortierung:
=data --> es wird entsprechend des ersten
Auftretens der Einträge in der in der Datei
vorgegebenen Reihenfolge sortiert; = .... siehe
SAS-help.
RUN;
RETAIN ermöglicht Variablenwerte vorheriger Schleifendurchläufe mit INPUT in DATASteps beizubehalten; vname erhält erst dann einen neuen Wert, wenn vname im
weiteren Ablauf des Programms (z.B. dadurch das eine Bedingung wahr wird)
erneut aufgerufen wird; ohne RETAIN werden alle Variablen zu Beginn jedes
Schleifendurchlaufes auf leer gesetzt.
RETAIN_vname_a;
a ist ein Startwert;
RUN
führt die davor stehende Programmsequenz aus
SCAN
(Macro-Function) liest Text ein, der dann an der Stelle, wo das Macro aufgerufen
wurde, ausgegeben wird;
ACHTUNG: SCAN-Befehl darf nicht mit Semikolon enden (wahrscheinlich gilt
das immer).
%MACRO_mname;
das Beispiel liest bei Macro-Aufruf das a-te Wort
%SCAN(text,_a,_‘__‘)
aus text ein, wobei die Worte hier durch __ (in
%MEND;
Hochkommas) getrennt sind; statt des Textes text
kann auch eine Glabalvariable verwendet werden.
SCATTER erzeugt 3-D-Scatterplot; siehe G3D.
SELECT führt Wert-spezifisch (Werte einer definierten Variable) bestimmte Operationen
aus;
SELECT_(v1);
wenn v1 den Wert wert1 annimmt, wird vh1=a
WHEN_(wert1)_vh1=a;
gesetzt;
OTHERWISE;
wenn über die WHEN-Statements nicht alle
Ausprägungen (auch missing value !) von v1
angesprochen werden, muß OTHERWISE
angegeben werden (hier kann auch eine
Operation angegeben werden).
END;
SELECT_(v2);
hier Beispiel für alphanumerische Variable v2;
WHEN_('string1')_vh1=a;
WHEN_('string2')_vh2='text1';
OTHERWISE;
END;
SELECT_(v1);
WHEN_(wert1)_DO;
vh1=a;
vh2=b;
END;
WHEN_(wert2)_DO;
vh3='text1'; hier müssen vh3 und vh5 als Stringvariablen
vh4=c;
definiert werden;
END;
OTHERWISE;
END;
SELECT (SQL-Befehl) bestimmt die Variablen, die aus einer Quelldatei in eine neue Datei
eingelesen, bzw. im Output-Fenster ausgeben werden sollen; zum SELECT gehört
mindestens der FROM-Befehl (=> SELECT-Routine); SELECT-Routinen können
geschachtelt werden (siehe PROC SQL).
SELECT_*
übernimmt alle Variablen der Quelldatei.
SELECT_v1,_v2,_v3
übernimmt nur bestimmte Variablen;
SELECT_ *,_v1+v2_AS_vneu berechnet zusätzlich neue Variablen;
SELECT_valt_AS_vneu
neue Variablennamen zuordnen;
SELECT_distinct_v1
selektiert die Zeilen so, daß nur unterschiedliche
Einträge in der Spalte (Variable) v1 stehen.
SELECT_v1,_"Text",_v2
zwischen v1 und v2 wird in einer extra Spalte
Fließtext ("Text") ausgegeben
SELECT_v1,_CASE_WHEN…. (siehe unter CASE), bedingte Ausführung
(ähnlich wie IF...THEN…)
SET
bestimmt SAS-Data-Sets, mit dem ein neues Data-Set in einem DATA-Step erzeugt
werden soll; mehrere Dateien werden untereinander angeordnet, wobei alle
Variablen der Ausgangsdateien in der neuen Datei erscheinen; in dem betreffenden
Data-Step werden die Datensätze zeilenweise eingelesen: SET liest eine Zeile aus
dem Quelldatensatz ein, dann wird das folgende Programm bis zum RUN
abgearbeitet, dann springt SAS wieder an den Anfang des Data-Steps und beginnt
von vorn; so können dann auch zeilenweise Berechnungen mit den Daten
durchgeführt werden; (!!! dabei werden die Variablen aus der Quelldatei immer
erst beim eigentlichen SET mit neuen Werten belegt !!!).
SET_dname;
dname gibt Quelldatei an;
SET_libname.dname;
SET_dname1_dname2;
die Beobachtungen von dname1 und dname2 werden
untereinander angeordnet;
SET_dname_point=a;
wählt die a-te (a=ganzzahlig) Zeile (a-ter Datensatz)
von dname aus (wichtig!!!: nach random access auf
die Datenzeilen muß mit einem STOP;-Statement
dname wieder geschlossen werden, sonst läuft SAS
in eine Endlosschleife).
SET_d1;
(in einem DATA-Step) d2 besteht nur aus einer
IF_(_N_=1)_THEN_SET_d2; Datenzeile; der erste Durchlauf der DATA-Schleife
liest die erste Zeil von d2 ein und hängt diese an die
erste von d1; bei folgenden Durchläufen behält SAS
die Werte aus d2 und hängt sie an alle folgenden
Zeilen von d1 an.
Beispiel:
DATA mydata.probe1;
a=x+5;
b+4;
c+x;
SET mydata.probe;
z=y+1;
w+3;
RUN;
das Data-Set probe1 mit den Variablen x und y existiert bereits;
a bleibt in der 1.Zeile leer, da hier (1.Schleife der DATAAnweisung) x noch nicht definiert ist; b wird von Anfang an
hochgezählt: 1. Wert =4; bei c ist der 1.Wert=0, da x in der
1.Schleife noch leer ist; in der 2.Schleife wird dann der 1.x-Wert
(aus der 1.Schleife) zum c-Wert hinzuaddiert und in der 2.Datenzeile
ausgegeben.
SHEWHART erstellt Diagramme, die Aussagen über die statistische „Kontrolle“ eines
Prozesses ermöglichen; z.B. auch Boxplots; (siehe SAS-Hilfe Æ Graphics).
SORT
sortiert die Datensätze eines Data-Sets nach dem mit BY vorgegebenem Schlüssel
PROC_SORT;
BY_vname1_vname2;
RUN;
PROC_SORT;
BY_DESCENDING_vname1;
sortiert in absteigender Reihenfolge
RUN;
(default=aufsteigend)
SPECTRA (Procedure) führt Spektralanalysen durch.
PROC_SPECTRA_data=dname
_out=dneu
Ausgabe der betrachteten Frequenzen (als
Kreisfrequenzen!; Umrechnung mit
f=freq/(2*pi)) und Perioden in Datei dneu; .
_p
Ausgabe der Periodogrammwerte.
_s
Ausgabe der geglätteten Periodogrammwerte
_adjmean
führt eine Mittelwertbereinigung durch
_whitetest;
testet auf Vorliegen von White Noise mit der
Bartlett's Kolmogorov-Smirnow-Statistik; gibt
nur die Teststatistik aus: kritischer Wert muß per
Hand berechnet werden.
VAR_v1;
Werte in v1 werden analysiert.
WEIGHTS_a_b_c_d_c_b_a; gibt die Gewichte für die Glättung der
Periodogrammwerte an; d (mittlerer Wert) gilt für
den Zeitpunkt, für den die Glättung jeweils
durchgeführt wird.
RUN;
SQL
(Procedure) ermöglicht die Eingabe von SQL-Befehlen; die SQL-Befehlssequenz
hat eine bestimmte Struktur (s.u.); das abschließende Semikolon kommt erst nach
dem letzten SQL-Befehl; Variablen- und Dateinamen werden bei
Listenschreibweise durch Komma voneinander getrennt;
Achtung! es gibt ein Problem mit Globalvariablen in SQL innerhalb von Makros:
durch die fehlenden Zeilenbegrenzungen in SQL kann SAS scheinbar der Variable
nachfolgende Befehle und die Variable selbst nicht richtig interpretieren (siehe
MACRO); problematisch sind ebenfalls mit %LET.. definierte TextMakrovariablen, deren Text durch Funktionen zusammengesetzt/erstellt wird; bei
mit CALL SYMPUT.. erstellten Variablen scheint dies nicht aufzutreten.
PROC_SQL;
die Reihenfolge der Befehle ist festgelegt;
CREATE_TABLE_dname1_AS
die Befehle GROUP BY, WHERE, und
SELECT_*
HAVING und ORDER BY müssen nicht
FROM_dname2
angeführt werden, können aber alle
WHERE_(Bedingung)
parallel verwendet werden; siehe auch die
GROUP_BY_v1
Erklärungen zu den einzelnen Befehlen;
HAVING_kng(Bedingung)
HAVING wird mit Kenngrößen (kng) verORDER_BY_vname;
wendet
QUIT;
PROC_SQL_feedback;
SELECT_v1,_v2
FROM_tab1,_(SELECT...),_tab2
WHERE_v3>_ALL_(SELECT...)
QUIT;
feedback führt dazu, daß im log-Fenster
ebenfalls die Syntax von verwendeten
VIEW's angezeigt wird.
SELECT-Routinen können geschachtelt
werden und dann hinter FROM als
Tabelle oder hinter WHERE als Vergleichswerte für die Bedingung verwendet werden.
SUMMARY (Procedure) führt einfache beschreibende Statistiken durch und kann diese in
Datei ausgeben; es können noch mehr statistische Kennzahlen ausgegeben werden
(z.B. Kurtosis, Skewness, Konfidenzgrenzen, Prob. für Student.-T-Vtlg., etc), als
unten angegeben.
PROC_SUMMARY_data=dname;
CLASS_v1;
ermöglicht nach v1 zu gruppieren;
VAR_v2;
für v2 werden die Kennzahlen bestimmt.
BY_v3;
ermöglicht nach v3 zu gruppieren.
FREQ_v6;
?????
ID_v4_v5;
ermöglicht zusätzliche Variablen in die
Output-Datei zu schreiben.
OUTPUT_out=dneu
_n=Anzahl
(ohne missings)
_nmiss=mAnzahl
Anzahl missings.
_sum=Summe
_mean=Mittelwert
_std=Standardabweichung
_var=Varianz
_min=Minimum
_max=Maximum
_range=Range;
RUN;
STR
(Macro) definiert einen festen, konstanten Text (String), der an der betreffenden
Stelle des Makroaufrufes ausgegeben werden soll; so können z.B. Variablennamen
per Globalvariable eingesetzt werden (siehe Beispiel 9).
%LET_v1=%STR_(Text);
beim Aufruf von &v1 wird dann Text eingefügt.
%LET_v1=%STR_(*);
beim Aufruf von &v1 wird ein * ingefügt; eignet
sich zum Auskommentieren von Programmzeilen.
SYMBOLa hiermit können Zusatzoptionen für die grafische Ausgabe der a-ten Kurve
definiert werden; es muß aber als erstes die Farbe (c) definiert werden.
SYMBOLa_c=colour
Legt die Farbe fest.
v=dot
Werte werden als Punkte dargestellt.
i=.....;
legt Interpolationform fest; i=join verbindet die
Punkte nur; bei i=rl wird eine lineare, bei i=rq eine
quadratische, bei i=rc kubische Regressionsanalyse
durchgeführt: die zugehörige Geradengleichung
wird im Log-Fenster ausgegeben; zusätzlich können
cl für Konfidenzgrenzen, m für mean angegeben
werden; i=box, i=boxt für Boxplots (wird dann mit
PLOT ausgeführt).
SYMBOLa_i=r...
führt Regression durch, aber nur für die Punkte, die
in dem durch die Achsen begrenzten Wertebe-reich
liegen; ..l = lineare; ...q = quadratische; ...c =
kubische; ..._0 = Regressionskurve geht durch den
Ursprung; ..._clm = 95%Konfidenzintervall (KI);
..._clizahl = KI für Einzelwerte mit zahl zwischen 50
und 99 %.
_i=join
verbindet aufeinanderfolgende Punkte durch eine
Gerade
_i=spline
legt eine Kurve durch alle Punkte.
_i=splines
wie spline, ordnet die Werte aber vor dem Plotten
nach der unabhängigen Variable.
_i=splinep;
spezifiziert eine parametrische Spline-Methode
SYMPUT
siehe CALL SYPUT;
TABLE erzeugt Tabellen in PROC TABULATE; es sind drei Gliederungsebenen (jeweils
durch Komma getrennt) möglich: Tabellen Zeilen, Spalten; es werden immer
Angaben zu Zeilen und Spalten erwartet; die Differenzierung in verschiedenen
Tabellen (v0: siehe unten) ist optional; die Ausgabenreihenfolge der einzelnen
Gliederungsstufen ist aufsteigend numerisch oder alphabetisch sortiert (. für
numerische und " " für string-Variablen gelten als kleinstes Zeichen; durch Anzahl
der Leerzeichen am Anfang eines Strings kann also die Ausgabenreihenfolge
beeinflußt werden!!).
Es gibt spezifische Funktionen innnerhalb des TABLE-Statements:
ALL
erzeugt eine Zeile/Spalte 'gesamt' auf der jeweiligen Hierarchieebene
n
bewirkt die Ausgabe von Anzahlen
pctn< > gibt Prozentzahlen aus, wobei zwischen < > definiert wird, über was
prozentuiert wird (z.B. bei Spaltenprozenten, welche Zeilen
zusammengefaßt werden sollen)
TABLE_v0
verschiedene Tabellen differenziert nach v0
,_
v1*v2
Strukturierung der Zeilen.
,_
v3
Strukturierung der Spalten.
_/_rts=a
legt die Breite der 1. Spalte fest.
_indent=b
die Gruppierungshierarchie der Zeilen wird durch
Einrücken um b Zeichen und innerhalb einer Spalte
dargestellt.
_box="text"
Definition des Textes für Tabellenzelle links oben.
_condense;
bewirkt, daß möglichst viele komplette Tabellen auf eine
Seite kommen.
TABLE_v1*v2_ALL=‘Summe‘,
v3*v4*(n_pctn<v1*v2_ALL>)*f=6.2;
TABLE (SQL-Befehl) erzeugt Tabellen (abgespeichert) und definiert deren Aufbau bzw. die
Attribute der einzelnen Spalten (Attribute: siehe Skript S.22).
CREATE_TABLE_tname_(sp1_Attribut_LABEL=sp1name,
sp2_Attribut_INFORMAT=def1_FORMAT=def2);
definiert eine neue Tabelle (ohne jegliche Einträge); Attribut
definiert Text-, Zahlen- und Datumfelder (Anzahl Stellen,
Nachkommastellen, (Grammatik)); nach INFORMAT= kann
eine Eingabemaske, nach FORMAT= ein Ausgabeformat
definiert werden, die sich voneinander unterscheiden können;
mit LABEL kann eine von sp1 abweichende Spaltenüberschrift
für die Ausgabe angegeben werden.
CREATE_TABLE_dname_AS_
erzeugt SAS-Dataset und speichert dieses unter dname;
(anschließend an diese Zeile kommt die normale Befehlsfolge
mit SELECT, ....)
ALTER_TABLE_tab1_MODIFY_sp1_Attribut;
modifiziert ein Attribut der Spalte sp1
ALTER_TABLE_tab1_ADD_spneu_Attribut;
fügt zu einer bestehenden Tabelle die Spalte spneu hinzu.
ALTER_TABLE_tab1_DROP_sp1;
löscht die Spalte sp1 aus der bestehenden Tabelle tab1.
TABLES erzeugt Tabellen, auch Häufigkeitstabellen; in PROC FREQ;
TABLES_vname_ /out=dname; erzeugt Häufigkeitstabelle zu den Klassen in
vname (wie nominal skaliert); Ergebnis kann als
SAS-Data-Set abgespeichert werden.
TABLES_vzeile*vspalte;
erzeugt Tabelle; vertikale Klassen (bzw. Zeilenbezeichnungen) stehen in vzeile, horizontale
Klassen (bzw.Spaltenüberschriften) in vspalte;
berechnet Randsummen; Variable mit
Häufigkeitswerten wird mit WEIGHT angegeben.
TABLES_vz*vs_/_expected
_deviation
_cellchi2
_chisq
_nocol
_norow
_nopercent
_nocum
_nofreq
_list
_missprint
_missing
_measures;
_cmh
_trend
_exact
_agree
_relrisk
schreibt in die Zellen (bei gegebenen Randhäufigkeiten) die bei Unabhängigkeit von vz und vs
erwarteten Häufigkeiten.
Differenz zwischen beobachteter und erwarteter
Häufigkeit.
berechnet das Zellen-Chi².
berechnet den Chi²-Test auf Unabhängigkeit,
Likelihood Chi²-Teststatistik, Mantel-HaenszelChi²-Teststatistik, Fisher's Exakten Test.
keine prozentualen Häufigkeiten für Spalten.
keine prozentualen Häufigkeiten für Zeilen.
keine prozentualen Häufigkeiten für Zellen.
keine kumulierten absoluten und relativen
Häufigkeiten in eindimensionalen Häufigkeitstabellen.
keine absoluten Häufigkeiten in zweidimensionalen Kontingenztafeln.
druckt die Kontingenztafel im Listenformat
fehlende Werte werden in der Kontingenztafel
mit '.' aufgeführt; bei der Berechnung aller
Prozentangaben gehen sie nicht mit ein.
wie missprint aber zusätzlich werden fehlende
Werte bei Berechnung aller Prozentangaben mit
einbezogen.
liefert verschiedene Assoziationsmaße
1.) ruft Mantel-Haenszel-Chi²-Test als „Nonzero
Correlation“ in Tabelle Cochran-Mantel-Haenszel
Statistics
2.) ruft Cochran-Mantel-Haenszel-Teststatistik
auf als „Row Mean Score Differ“ in Tabelle
Cochran-Mantel-Haenszel Statistics; ordinales
Merkmal (muß) über die Spalten der
Kontingenztafel differenziert werden; im
MODEL-Statement: vspalte.
3.) ruft für Spezialfall 3-dimensionale Kontingenztafel Mantel-Haenszel-Methodik auf, um
mehrere Chi²-Teststatistiken von 2-dimensionalen
KT zusammenzubetrachten (s.o.)--> Common
Odds Ratio.
ruft den Cochran-Armitage-Test auf
ruft exakte Teststatistiken auf
1.) ruft bei Vierfeldertafeln die Mc-NemarTeststatistik und Kappa-Koeffizient
2.) ruft bei quadratischen s*s-Kontingenztafeln
die Bowker-Teststatistik, 'Simple Kappa' und
'Weighted Kappa' auf.
nur für Vierfeldertafel: berechnet odds ratio (OR;
im Output unter 'Case Control' angegeben) und
relatives Risiko (RR; getrennt für die Spalten)
und deren Konfidenzintervalle; Faktoren so
anordnen, daß Zeilenhäufigkeiten festgelegt sind
_riskdiff
_alpha=a
TABLES_v1*v2*v3_/_cmh;
(bei Fall-Kontroll- und Kohorten-Studien jeweils
andersherum); SAS betrachtet die Tafel so, als ob
die Exponierten in der ersten Zeile stehen!
nur für 2x2-Tafel; bestimmt relative Risiken
(oder binomiale Anteile) für Spalte 1 und 2,
Differenz der Risiken und ihre Konfidenzgrenzen (die KI-grenzen der Differenz können als
einseitiger Test bei Vorgabe eines anteiligen, in
% angegebenen Grenzwertes für die Abweichung
verwendet werden; Gruppen auf die Zeilen
verteilt).
für die KI bei relrisk kann die KI-Größe
((1-a) *100%) vorgegeben werden.
führt Chi²-Tests für v2 und v3 durch und
kontrolliert dabei für verschiedenen Werte von
v1.
TABULATE (Procedure) erzeugt Tabellen mit absoluten und relativen Anzahlen zu
verschiedenen Kombinationen kategorialer Merkmale; hierarchisch verknüpfte
Variablen werden im TABLE-Statement mit einem * verknüpft: jede Kategorie der
übergeordneten Vaiable wird dann nochmals in die Kategorien der untergeordneten
aufgeteilt; nicht-hierarchisch verknüpfte Variablen/Zeilen/Spalten werden durch ein
Leerzeichen getrennt; mit ...=‘name‘ werden Bezeichnungen für die Spalten/Zeilen
vergeben; mit f=... werden Formate zugeteilt
PROC_TABULATE_data=dname
_missing
missings werden mit einbezogen.
_format=a.b; legt Format der Einträge und Breite der 2. bis nten Spalte fest.
CLASS_v1_v2_v3_v4;
Klassifizierungsvariablen.
TABLE_v1*v2
Æ hierarchische Zeilenaufteilung: für jede
Kategorie von v1 gibt es die Unterteilung zu den
Werten von v2.
,_
Komma trennt die Strukturanweisungen für
Zeilen und Spalten
v3*v4;
Æ hierarchische Spaltenenaufteilung: für jede
Kategorie von v3 gibt es die Unterteilung zu den
Werten von v4.
RUN;
PROC_TABULATE_data=dname;
CLASS_v1_v2_v3_v4;
TABLE_v1*v2_ALL=‘Summe‘
,_
v3*v4
*(n_pctn<v1*v2>=‘%‘)*f=a.b;
es werden je v3*v4-Kategorie eine
Spalte für n und eine für % ausgegeben;
zwischen den <> wird angegeben, über welche
Zeilen vertikal, bzw. über welche Spalten
horizontal prozentuiert wird.
RUN;
TITLE
ermöglicht die Eingabe von Titelzeilen für die Ausgabe im Out-Fenster; der Text
muß in Hochkommas gesetzt werden; nur wenn der Text in doppelten
Hochkommas steht, werden im Text angegebene Global-/Makrovariablen durch die
entsprechenden Werte ersetzt.
TITLEa_'Text';
Text steht als a-te Titelzeile im Output
TITLE_"Der Startwert ist seed=&vg"; & kennzeichnet Global-/Makrovariable
TITLE_"#byval1 Text";
#byval1 liest den aktuellen Wert einer im
BY-Statement bearbeiteten Variable ein.
TRANSPOSE (Procedure) transponiert SAS-Datasets; mit BY lassen sich hierarchisch
aufgebaute Tabellen umstrukturieren (siehe Beispiel 8: in SAS ablaufen lassen und
zugehörigen Output ansehen!).
PROC_TRANSPOSE_data=dalt
_out=dneu;
VAR_v3_v4_v5;
gibt an, welche Spalten transponiert werden
BY_v1_v2;
v1 und v2 werden als Klassifizierungsvariablen
beibehalten; (siehe Beispiel 8).
ID_v4;
gibt an, aus welcher Spalte alt die Bezeichnungen
für die neuen Spalten genommen werden sollen.
RUN;
TREE
(Procedure) zeichnet Dendogramme; mit der Procedure CLUSTER wird zunächst
eine Clusteranalyse durchgeführt und die entsprechende Grafikinformationen für
ein Dendogramm mit der Option "outtree" in eine neue Datei ausgegeben; diese
Datei wird dann in PROC TREE eingelesen (=dname) und damit das Dendogramm
erzeugt.
PROC_TREE_data=dname
dname wurde in PROC CLUSTER mit der
Option outtree erzeugt.
_graphics
zeichnet das Dendogramm; ohne wird
Pixelgrafik erzeugt.
_horizontal
horizontales Dendogramm.
_spaces=b
erzeugt b Leerzeichen zwischen den
einzelnen Objekten im Ausdruck.
_out=dhneu
für jede Beobachtung wird hier die
Clusterzugehörigkeit mit ausgegeben
(Option level oder ncluster muß
angegeben werden).
_nclusters=a
das Dendogramm soll in a Cluster zerlegt
werden.
_level=b;
legt das Ähnlichkeitslevel b (bezieht sich
vom Wert auf die vertikale Dendogrammachse) fest, ab dem eine Unterteilung in
getrennte Cluster erfolgen soll.
NAME_v1;
v1 benennt/identifiziert die einzelnen
Beobachtungen (kann fehlen).
COPY_v5_v6;
v5, v6 werden mitgeführt (z.B. bei out).
RUN;
TTEST
(Procedure) führt einen Zweistichproben T-Test auf Gleichheit der Mittelwerte
durch; zusätzlich ein F-Test auf Varianzgleichheit (Varianzquotiententest) sowie
einen Welch-Test auf Gleichheit der Mittelwerte, dessen Teststatistik bei
Ungleichheit der Varianzen verwendet werden kann; die Daten beider Stichproben
müssen in einer Variable (in einer Spalte) untereinander stehen;
PROC_TTEST_data=dname;
CLASS vklass;
nach vklass werden die Werte der zwei StichVAR vname;
proben unterschieden
RUN;
UNION (SQL-Befehl) gibt die Zeilen verschiedener Tabellen untereinander aus; es können
(beliebig) viele Tabellen in dieser Form verknüpft werden.
Achtung: Fehler traten bei einer UNION-„Kette“ auf, wo die einzelnen SELECTAbfragen noch Funktionen (Æ count...), GROUP BY enthielten und jeweils die
gleichen Variablen erzeugten; die SELECT-Abfragen einzeln ergaben zusammen
mehr Datensätze als in der mit UNION zusammengesetzten Datei (siehe Beispiel
7).
SELECT_*_FROM_t1_
setzt die 1.Spalte aus t2 unter die 1.Spalte von t1;
UNION_
dabei werden primär die Spaltenbez. von t1 überSELECT_*_FROM_t2; nommen; fehlende Einträge werden durch missing
values aufgefüllt.
SELECT_*_FROM_t1_
hier werden nur die Spalten von t1 und t2 untereinUNION_CORR_
ander gesetzt, deren Bezeichnungen in t1 und t2
SELECT_*_FROM_t2; übereinstimmen; die übrigen Spalten werden nicht
ausgegeben.
SELECT_*_FROM_t1_
hier werden nur die Spalten von t1 und t2 untereinOUTER_UNION_
ander und hintereinander gesetzt; es erfolgt keine
SELECT_*_FROM_t2; Zusammenführung von Spalten; fehlende Einträge
werden durch missing values aufgefüllt.
SELECT_*_FROM_t1_
wie oben, aber gleichlautende Spalten von t1 und t2
OUTER_UNION_CORR_ werden zusammengeführt; fehlende Einträge werden
SELECT_*_FROM_t2; durch missing values aufgefüllt.
UNIQUE (SQL-Befehl) siehe INDEX.
UNIVARIATE (Procedure) berechnet deskriptive Statistiken für univariate Stichproben.
S.42; S.62. berechnet auch Einstichproben T-Test für H0:µ=0 (für andere
Mittelwerte muß dieser vor dem Test von den Daten abgezogen werden);
berechnet Test auf Normalverteilung (mit beliebigem µ und sigma²), bei
n<=2000 Shapiro-Wilk-Test (Testgröße W: Normalverteilngsannahme
beibehalten, wenn Pr<W größer als 0.1 ist), bei n>2000 KolmogorovSmirnov-Test (Testgröße D);
PROC_UNIVARIATE_data=dname_normal_normal_plot;
die Option normal führt einen Test auf
Normalverteilung für die unter VAR definierte
Variable durch; die Option normal plot erzeugt
Stem-Leaf- Diagramm, Boxplot, NormalProbability-Plot;
BY_vclass;
mit BY_vclass kann die Berechnung der
VAR_vname;
statistischen Kennzahlen getrennt für die
verschiedenen Klassen von vname durchgeführt
werden;
OUTPUT_out=dneu
mit OUTPUT kann die Ausgabe in eine
_ n=anzahl
Datei (out=...) erzeugt, die Anzahl der Kenn-
_min=minimum
zahlen begrenzt und deren Bezeichnung
_mean=mittelwert festgelegt werden.
_max=maximum
_var=varianz
_median=median
_mode=modalwert
_pctlpts=a
a-tes Percentil (a in %, zwischen 1 und 100).
....=a_TO_b_BY_c gibt mit Schrittweite c die Percentile von a
bis b aus.
_pctlpre=text;
text wird als Präfix im Variablennamen für
die Percentile verwendet.
RUN;
UPDATE
(SQL-Befehl) verändert die Werte einzelner Spalten in einer bestehenden
Tabelle; mit CASE kann die veränderung differenziert und an Bedingungen
geknüpft werden
UPDATE_tname_SET_v1=v1+a;
USE
siehe IML (Procedure)
VALIDATE
(SQL-Befehl) ermöglicht innerhalb der PROC SQL die Überprüfung der
Syntax von SQL-Befehlen, ohne daß diese ausgeführt werden.
VALIDATE_SELECT_....._FROM_...:
VALUE definiert Wert- bzw. String-Zuweisungen (im Austausch) unter einem FormatNamen (Formatnamen dürfen nicht mit Zahlen enden); dies Format kann dann mit
diesem Namen Variablen zugewiesen werden (siehe Statement FORMAT); wird in
PROC FORMAT verwendet; Variablenwerte, die in der VALUE-Zeile nicht
berücksichtigt werden, werden unverändert ausgegeben.
VALUE_fname1_wert1='string1' Format für numerische einzelne Werte.
_wert2='string2';
VALUE_&fname_text1='string1' Format für alphanumerische einzelne strings;
_text2='string2'; die Länge von string bestimmt später das
Ausgabeformat für die Textvariable.
VALUE_fn_wert1,_wert2,_wert3='string1'; Liste von Werten.
VALUE_fn_wert1-wert2='string1';
Bereich von Werten (Bereiche
dürfen sich nicht überschneiden !!).
VALUE_fn_wert1<-wert2='text';
Bereich ohne den Grenzwert wert1.
VALUE_fn_LOW-wert1='klein'
der Bereich reicht vom kleinsten
vorhandenen Wert (ohne missing !!) bis
wert1.
_wert1='string1'
_OTHER='string2'
betrifft alle sonst nicht berücksichtigten
Werte (auch missings !!).
_wert3-HIGH='groß';
der Bereich reicht von wert3 bis zum
größten vorhandenen Wert.
VIEW
(SQL-Befehl) erzeugt virtuelle Tabellen, die nicht mit ihren Werten abgespeichert
wird, wohl aber die Anweisung zur Erstellung dieser Tabelle (Dateikennung:
*.sv2); diese virtuelle Tabelle wird in späteren SQL-Sitzungen durch Aufruf der
Datei *.sv2 (ganz normal als Tabelle mit FROM libname.viewname ansprechen)
neu erzeugt und verwendet.
CREATE_VIEW_viewname_AS_Abfrage
Abfrage entspricht einem
SELECT-Befehl
WEIGHT
kann die Variable mit den Werten für die einzelnen Zellen einer Tabelle
festlegen; in PROC FREQ; ermöglicht die Erstellung von Kontingenztafeln mit
absoluten Häufigkeiten als Rohdaten.
WEIGHT_vname;
vname enthält die absoluten Häufigkeiten.
WHERE ermöglicht beim zeilenweisen Abarbeiten einer Datendatei Beschränkungen auf nur
bestimmte Zeilen (Datensätze); wenn die Bedingung war ist, wird der Datensatz
verwendet.
WHERE_v1=wert_OR_v2='strin1';
WHERE (SQL-Befehl) hiermit können zeilenweise Daten ausgewählt werden, die eine
bestimmte Bedingung erfüllen (siehe auch HAVING); diese Restriktion gilt auch
für alle weiteren Befehle der selben SELECT-Routine; kann sich aber nur auf
Variablen beziehen, die in den unter FROM bestimmten Tabellen bereits vorhanden
sind, nicht die, die mit AS neu definiert wurden.
WHERE_(Bedingung)
Bedingung enthält logische/mathematische
Verknüpfungen von Variablen und Berechnungen;
WHERE_d1.v1=d2.v2
um Datensätze aus verschiedenen Dateien (d1, d2)
gezielt miteinander zu verknüpfen, müssen hier die
beiden Schlüsselvariablen (v1, v2) definiert werden
WHERE_v1<_ALL_(SELECT....)
(siehe ALL und SELECT)
WHERE_v1_IN_(a,_b)
WHERE_v1_BETWEEN_a_AND_b
Allgemeine Optionen:
NOPRINT unterbindet den zu einer Procedure gehörenden Output in Output-Fenster; wird
in der PROC-Zeile verwendet.
PROC_UNIVARIATE_data=dname_NOPRINT;
NOSORT
unterbindet Sortierung in der Ausgabe
Mathematische Funktionen und Operatoren:
Achtung: sollte bei einer mit Operatoren (+, -, *, /) erstellten Berechnungs-Formel einer der
angesprochenen Terme/Variablen ein missing haben, so wird auch das
Gesamtergebnis der Formel auf missing gesetzt!
+
-
Addition
Subtraktion
*
/
Multiplikation
Division
log(a)
1Ea
berechnet den natürlichen Logarithmus von a
Faktor: 10a (Anzahl der Nullen = a); z.B.: 345 * 1E4 = 345E4 = 3450000.
Logische Operatoren:
AND, &
OR
AND NOT
EQ, =
^=
<
>
<=
>=
Sonstige Operatoren:
||
Aneinanderhängen von Zeichenketten.
Funktionen (operieren in SAS nur !! zeilenweise, datensatzweise; in SQL anders):
(Siehe auch Æ SAS System Help: Main Menu
Æ SAS Language
Æ SAS Functions
Æ Function Categories
_N_
liest die Beobachtungsnummer (Zeilennummer, OBS) in eine Variable ein
vname=_N_;
_LAST_
zeigt auf die zuletzt mit einem DATA-Step erzeugte Datei
PROC_...._data=_LAST_;
arcos
arcuscosinus, Umkehrfunktion der Cosinusfunktion
var=arcos(wert);
arsin
arcussinus, Umkehrfunktion der Sinusfunktion
var=arsin(wert);
atan
arcustangens, Umkehrfunktion der Tangensfunktion
avg
(SQL-Befehl) gibt den Mittelwert zurück;
avg(var1)_AS_mittel
cdf
(siehe auch pdf) gibt Werte von Verteilungsfunktionen zurück; kann für
verschiedene Verteilungen verwendet werden;
var = cdf('Verteilungstyp',<parameter1>,<parameter2>,<…>);
var = cdf('normal');
var = cdf('binomial',a,p,n);
a=Anzahl Erfolge, p=Erfolgswahrscheinlichkeit,
n=Anzahl Versuche
ceil
kleinster ganzzahliger Wert >= Argument (a)
vname_=_ceil_(a);
cinv(a,b)
gibt Werte zum a Quantil für die Chi²-Verteilung mit b Freiheitsgraden aus; kann
zur Berechnung des kritischen Werts für Chi²-Test verwendet werden.
vname=cinv(a,b);
compbl
entfernt doppelte blanks aus einem string (z.B. wenn die Ziffern einer Zahl bündig
an einen Text angehängt werden sollen.
vneu=compbl(vstring);
vneu=left('text'||compbl(vzahl));
cos
var=cos(wert);
dim
gibt die Anzahl der Variablen eines Variablenarrays zurück.
vanz=dim(varray);
exp
exponiert zur Basis e
vname=exp(a);
a kann Zahl oder numerische Variable sein.
finv(a,b)
gibt Werte zum a Quantil für die F-Verteilung mit b bzw. c Freiheitsgraden aus;
kann zur Berechnung des kritischen Werts für F-Test verwendet werden.
vname=finv(a,b,c);
floor
größter ganzzahliger Wert <= Argument (a)
vname_=_floor_(a);
input
3.) zur Konvertierung von Text-Zahlen in numerische Zahlen
v1=input(trim(left(textzahl)),a.b); wandelt eine String-Zahl in eine numerische Zahl
um.
lag
wird in DATA-Steps verwendet; behält bzw. listet Werte vorheriger
Schleifendurchläufe des DATA-Steps;
var2=laga(var1);
die Funktion übergibt an var2 bis einschließlich
zum a-ten Schleifendurchlauf missing value; in
den folgenden Schleifen s (mit s>=a+1) wird der
Wert des Schleifendurchlaufs s-a an var2
übergeben.
left
setzt den String linksbündig.
vneu=left(valt);
(siehe auch right, center).
left
(SQL-Funktion)
log
bildet den Logarithmus zur Basis e.
loga
bildet den Logarithmus zur Basis a, wobei irgendeine ganze Zahl ist.
max
gibt aus einer Auswahl von Werten den größten an (Maximum)
(Syntax siehe MIN)
mdy
gibt einen SAS-Datums-Wert zurück, der mit den numerischen Variablen
v_monat, v_tag und v_jahr vorgegeben wird;
Achtung: die Jahresangabe in v_jahr kann zweistellig (ohne 19-hundert) oder
vierstellig angegeben werden (auch gemischt); aber bei Jahr-2000-Übergängen
erfolgt die Umsetzung ins SAS-Datum nur dann korrekt, wenn vierstellig
angegeben wird
v_datum=mdy(v_monat,_v_tag,_v_jahr);
mean
bildet den arithmietischen Mittelwert einer Gruppe von Variablen(werten)
(Syntax siehe MIN)
min
gibt aus einer Auswahl von Werten den kleinsten an (Minimum)
Syntax und zugehörige Erklärungen gelten sinngemäß auch für andere
Funktionen!
hier wird das Funktionsergebnis auch dann gebildet, wenn eine der Variablen leer
(missing value) ist; das Funktionsergebnis wird immer nur zeilenweise gebildet
(anders bei SQL-Funktionen).
vname_=_min_(v1, _v2, _v3); mit einer Liste von Variablen(werten).
vname_=_min_(OF_va-vb);
mit einem (Variablen)array: dann muß OF
verwendet werden.
mod
Modulo-Funktion; gibt den Rest zurück, der beim Teilen einer Zahl durch eine
andere übrig bleibt.
vneu=mod(zahl1,_zahl2);
ergibt den Rest bei Teilung von zahl1 durch
zahl2.
vneu=mod(v1,_1);
ergibt die Nachkommastellen von v1.
n
gibt die Anzahl der "nicht-missing"-Einträge aus einer Liste von Variablen
zurück;
var=n(v1,_v2,_v3);
möglicher Wertebereich für var: 0<=var<=3.
%nrquote (Macro quoting function) the %NRQUOTE function (see also %QUOTE) masks a
character string during compilation of a macro or macro language statement.
Additional to those mentioned for %QUOTE it also masks:
& %
%nrstr
(Macro quoting function) the %NRSTR function (see also %STR) masks a
character string during compilation of a macro or macro language statement.
Additional to those mentioned for %STR it also masks:
& %
Eingebundene Makrovariabeln, die bei Ausführung des Strings umgesetzt werden
sollen, müssen in die Funktion RESOLVE(‘&makrovar.‘) oder
SYMGET(‘makrovar‘) eingebunden werden: ACHTUNG, wenn diese
Makrovariabeln wiederum Variabelnamen als Wert entahlten, so werden diese
nicht als solche erkannt und nicht umgegesetzt sondern sie werden wie Text
behandelt.
pdf
(siehe auch cdf) gibt Werte von Dichtefunktionen zurück; kann für verschiedene
Verteilungen verwendet werden;
poisson
Verteilungsfunktion der Poisson-Verteilung mit den Parametern lambda.
f_=_poisson_(lambda,x);
entspricht probnorm
probbnml Verteilungsfunktion der Binomialverteilung X~B(n,p)
f_=_probbnml_(p,n,x)
entspricht probnorm
probchi
Verteilungsfunktion der Chi²-Verteilung mit FG Freiheitsgraden
f_=_probchi_(x,FG);
entspricht probnorm
probit
gibt Quantile der Standard-Normalverteilung aus;
x=probit_(a)
gibt das (a*100)%-Quantil an x zurück; mit a
zwischen 0 und 1.
probnorm Verteilungsfunktion der Standardnormalverteilung
f_=_probnorm_(x);
übergibt an f die Wahrscheinlichkeit, daß eine
standardnormalverteilte ZV einen Wert kleiner
gleich x annimmt.
probt
put
%quote
Verteilungsfunktion der t-Verteilung mit FG Freiheitsgraden
f_=_probt_(x,FG);
entspricht probnorm
1.) für die Zuweisung von Werten/Einträgen für (String)Variablen bei gleichzeitiger
Formatänderung (der einzelnen Komponenten);
2.) kann zur Konstruktion von Variablennamen verwendet werden, wenn durch die
Syntax eindeutig vorgegeben wird, daß es sich um einen Variablennamen handelt
(z.B. ein Argument in einer Funktion) und nicht um einen Variableneintrag.
var1=put(var2,_format.);
beim Eintrag in var1 werden die Werte von var2
mit dem Format format umgesetzt.
var1=put(var2,_za.0);
das 'z' im Format 'za.0' (a ist eine Zahl) bewirkt,
daß fehlende Zeichen durch Nullen ergänzt
werden.
v1="text"||put(v2,_format.);
v1='text'||put(trim(left(v2)),a.b); fügt eine Zahl mit dem Format a.b als String an
text linksbündig an.
v1='text'||trim(left(v2));
fügt eine Zahl als String an text linksbündig an.
(Macro quoting function) the %QUOTE function (see also %NRQUOTE, %STR,
%NRSTR) masks a character string during compilation of a macro or macro
language statement. It masks the following special characters and mnemonic
operators:
+ - * / < > = ¬ ^ ~ ; , blank
AND OR NOT EQ NE LE LT GE GT
It also masks the following characters when they occur in pairs and when they are
not matched and are marked by a preceding % :
'"()
RANBIN Realisierung einer binomialverteilten Zufallsvariable
vname_=_RANBIN_ (seed,n,p);
seed ist ein notwendiger Startwert für die
Zufallszahlenreihe; bei seed=0 übernimmt SAS
die Systemzeit; n entspricht der Anzahl der
betrachteten Bernoulli-Experimente; p gibt die
Erfolgswahrscheinlichkeit für das einzelne
Bernoulli-Experiment an.
RANEXP Realisierung einer exponentialverteilten Zufallsvariable mit λ=1
vname_=_RANEXP_ (seed)
seed ist ein notwendiger Startwert für die
Zufallszahlenreihe; bei seed=0 übernimmt SAS
die Systemzeit.
RANNOR Realisierung einer standardnormalverteilten Zufallsvariable mit N(0,1)
vname_=_RANNOR_ (seed); seed: siehe RANEXP
RANPOI
Realisierung einer poissonverteilten Zufallsvariable mit dem Parameter λ
vname_=_RANPOI_ (seed, _lambda); seed: siehe RANEXP
RANUNI Realisierung einer gleichmäßig verteilten Zufallsvariable zwischen [0,1]
vname_=_RANUNI_(seed);
seed: siehe RANEXP
repeat
setzt einen Text mehrfach in einen String ein;
string=repeat("text",_a);
text wird a-mal hntereinander in string eingefügt.
DO_i=1_TO_b;
string=repeat("text",_i);
END;
round
Rundung des Arguments (a)
vname_=_round_(a);
sin
var=sin(wert);
sqrt
Quadratwurzel
var=sqrt(wert);
%str
(Macro quoting function) the %STR function (see also %NRSTR) masks a
character string during compilation of a macro or macro language statement.
Funktioniert wie %QUOTE: weitere Erklärungen siehe dort.
Zu maskierende Makrovariabeln können in die Funktion SYMGET(‘...‘)
eingebunden werden; hier entfällt das & für den Makrovariabelnamen.
CAUTION:
Do not use %STR to enclose other macro functions or macro invocations that
have a list of parameter values. Because %STR masks parentheses without a
match, the macro processor does not recognize the arguments of a function or the
parameter values of a macro invocation.
substr
gibt einen substring (= Teilstring) einer Zeichenkette zurück.
vneu=substr(valt,_a,_b);
an vneu wird ein substring von valt übergeben,
der beim a-ten Zeichen von valt beginnt und b
Zeichen lang ist.
substr
(SQL-Funktion) gibt einen substring (= Teilstring) einer Zeichenkette zurück.
SELECT_substr(v1,_a,_b)
der substring beginnt beim a-ten Zeichen von v1
und ist b Zeichen lang.
sum
bildet die Summe aus einer Gruppe von Variablen(werten): zeilenweise !
(Syntax siehe MIN)
sum
(SQL-Funktion) bildet Summen spaltenweise, wenn das Argument nur aus einer
Variable besteht, wenn mehrere Variablen aufgelistet werden, wird nur
zeilenweise addiert; das Funktionsergebnis ignoriert bei der Addition missings.
SELECT_sum(Argument)_AS_vneu
SELECT_sum(var)_AS_vneu
spaltenweise für var.
SELECT_sum(v1, v2, v3)_AS_vneu zeilenweise über v1, v2, v3.
symget
übergibt den aktuellen Wert einer Makrovariable
var=symget ( ‘macrovarname‘ );
%LET_mvar2=%str(symget(‘mvar1‘)); mit dieser Konstruktion wird verhindert,
dass die Makrovariable mvar1 bereits in dieser
Zeile durch einen ihr zugewiesenen Wert ersetzt
wird. (siehe auch Beispiel 11)
tan
tangens, Tangensfunktion
tinv(a,b)
gibt Werte zum a Quantil für die Student-T-Verteilung mit b Freiheitsgraden aus;
kann zur Berechnung des kritischen Werts für T-Test verwendet werden.
vname=tinv(a,b);
trim
ermöglicht die Ausrichtung eines Wertes/Eintrags zu ändern???
(siehe auch put)
upcase
Abfrage; Ergebnis-Variable wird wahr (gibt eine 1 aus), wenn in Variable v2 der
mit 'Eintrag' speziefierte Wert auftaucht.
v1=upcase(v2)='Eintrag';
year
gibt aus einer SAS-Datums-Angabe dasJahr zurück.
vjahr=year(vdatum);
Sachregister:
Adjustierung bei multiplen paarweisen Tests Einstellung der Fehlerwahrscheinlichkeit auf
α=0.05 für das gesamte Experiment.
array
diese Form der Angabe ist bei Variablen mit Zählindex möglich:
also v1,_v2,_v3,_v4 (Listenform) ist gleichbedeutend mit v1-v4 (array-Form);
mit arrays kann eine Auswertung in Zeilen (Datenzeilen) erreicht werden
(siehe SAS-Functions).
Assoziationskoeffizient
(nach Yule) für Vierfeldertafel; beschreibt, ob eine
Konzentrierung der Beobachtungen auf der 1. oder der 2. Diagonale oder eine
Gleichverteilung vorliegt.
balanciert
balancierte Daten: alle Stichproben (oder Klassen oder Faktorstufenkombinationen) enthalten die gleiche Anzahl von Beobachtungen; in SAS
werden Teststatistiken unter TYPE I ausgegeben; (bei ungleicher Anzahl
werden die Daten unbalanciert genannt; in SAS Ausgabe unter TYPE III)
Bestimmtheitsmaß (= R²); Gütemaß bei Regressionsanalysen; gibt an, welcher Anteil der
Gesamtstreuung (SST) durch das Regressionsmodell erklärt wird;
Wertebereich zwischen 0 und 1; bei einer einfachen linearen Regression ist R²
die quadrierte Korrelation rxyzwischen x un y: R² = rxy² = SSM/SST; siehe auch
Streuungszerlegung;
Bindungen
(= ties) bei Überlebenszeitanalysen; wenn zu einem Zeitpunkt mehr als ein
Ereignis (= Todesfall) eintritt; muß in PROC PHREG auch bei Analyse
gematchter Fall-Kontroll-Studien berücksichtigt werden (Bindungen treten dort
dann auf, wenn mehr als ein Fall = Ereignis in einer gematchten Gruppe =
Stratum vorliegt: Matching-Verhältnis m : n);
Bowker-Teststatistik:( bei quadratischen s*s-Kontingenztafeln) testet auf Symmetrie (der
absoluten Häufigkeiten) zur Hauptdiagonalen in der Kontingenztafel;
überprüft, ob sich zwei abhängige Stichproben hinsichtlich der Verteilung einer
nominalen (ordinal geht auch) Zielgröße unterscheiden. (Verallgemeinerung
des Mc-Nemar-Tests);
dabei werden die tatsächlichen Übereinstimmungen (die auf der
Hauptdiagonalen liegen) nicht berücksichtigt, es wird also quasi auf Symmetrie
(Gleichheit) der Abweichungungen von den Übereinstimmungen getestet;
dieser Test macht z.B. dann Sinn, wenn zwei abhängige Stichproben
miteinander verglichen werden sollen
H0: 'es liegt Symmetrie zur Hauptdiagonalen vor'
Boxplots
(=Box and Whisker Plots) können mit SYMBOL_i=box und PLOT in PROC
GPLOT erzeugt werden.
Bravais-Pearson -> Maßkorrelation
Chi²-Anpassungs-Test
prüft auf Vorliegen einer bestimmten Verteilung (vollständig
spezifiziert) oder einer Verteilungsfamilie (Verteilungstyp; unvollständig
spezifiziert); bildet Differenzen zwischen theoretischer (bei gegebenen
Randhäufigkeiten) und empirischer Häufigkeitsverteilung; bei metrischen
Daten muß entsprechend klassiert werden; bei unvollständig spezifizierten
Hypothesen werden zunächst die Parameter der (theoretischen) Verteilung
geschätzt (--> andere Freiheitsgerade beachten) und dann die theoretischen
Häufigkeiten bestimmt.
Chigramm
graphische Darstellung der nichtquadrierten Abweichungen zwischen
empirischen und bei Unabhängigkeit der Merkmale erwarteten
Zellbesetzungen (= Zell-Chi-Werte); aufgetragen gegen die Klassennummern.
Chi²-Unabhängigkeits-Test
in SAS: kann in PROC FREQ mit
TABLES_v1*v2_/_chisq; aufgerufen werden; wenn die Erwartungswerte für
die einzelnen Zellen (der Häufigkeitstabelle, der Kontingenztafel)
kleiner/gleich 5 sind, ist dieser Test so nicht geeignet und es muß ein exakter
Test mit der zusätzlichen Option _exact aufgerufen werden; das Ergebnis steht
im Output unter „Fisher’s Exact Test“, wobei unter „left“ und „right“
Überschreitungswahrscheinlichkeiten für die entsprechenden einseitigen Tests,
unter „2-tail“ die für den zweiseitigen Test (diesen verwenden) angegeben
sind; bei kleinen Häufigkeitstabellen führt SAS den exakten Test automatisch
durch.
Cochran-Armitage-Test:
dieser ist nur für 2*s-Tafeln definiert (dichotome und ordinale
Variable); Frage nach einem gerichteten Zusammenhang (Trend); (SAS: ->
TREND-Option in PROC FREQ mit TABLES-Statement; r*2-Tafeln werden
auch korrekt bearbeitet)
H0 'Gleichheit aller Spaltenprozente' bzw. 'es liegt kein Trend (Zunahme oder
Abnahme der relativen Häufigkeiten über die Spalten) innerhalb einer Zeile
vor' ; (p11/p•1=p12/p•2=....=p1s/p•s)
gegen H1 'Monoton ansteigende oder fallende Spaltenprozente';
(p11/p•1>p12/p•2>....>p1s/p•s) oder (p11/p•1<p12/p•2<....<p1s/p•s)
Cochran-Mantel-Haenszel-Test:
testet auf Zusammenhang zwischen zwei Merkmalen,
wobei ein Merkmal ordinal (muß über die Spalten der Kontinggenztafel
differenziert werden; im MODEL-Statement: vspalte) und eins nominal (muß
über die Zeilen differenziert werden; vzeile) skaliert sein muß.
H0: 'k Zeilen haben alle die gleichen mittleren scores' bzw. ' µ1=µ2=...=µk'
gegen H1 'mindestens für zwei µ (i,j) gilt µi ungleich µj'
Common Odds Ratio
wird mit der Cochran-Mantel-Haenszel-Methode für dreidimensionale, 2 x 2 x k - Kontingenztafeln bestimmt; dabei wird eine 2x2Tafel durch einen dritten Faktor stratifiziert; das Common Odds Ratio ist dann
für diesen dritten Faktor adjustiert.
Cox-Regression eine Form der Generalisierten Linearn Modellle; wird z.B. beim
Proportional-Hazard-Modell verwendet;
Datum
(für Formate siehe oben unter FORMAT oder auch Æ SAS System Help Æ
SAS-Language Æ Formats and Informats Æ Date, Time, and Datetime
Formats)
(in SQL) Datum-Angaben werden in SAS/SQL als Anzahl Tage bezogen auf
ein Fix-Datum festgehalten; diese Werte werden aus abweichenden
Eingabeformaten, bzw. für abweichende Ausgabeformate umgerechnet; dies
bedeutet, wenn Datumwerte über den zugehörigen Variablennamen mit
mathematischen Operationen angesprochen werden, erfolgt die Berechnung
mit der Anzahl Tage.
Beispiel: In einer Tabellenspalte gebdat ist das Geburtsdatum festgehalten: es
soll jetzt die Differenz in Jahren zu einem best. Datum berechnet werden, hier
1. Januar 1998.
Berechnung:
('01JAN98'd-gebdat)/365=differenz
(Das d rechnet die datumangabe in Anzahl Tage um)
DFFITS
berechnet Maß für den Einfluß des einzelnen Wertes auf das Modell;
Faustregel: ist der Wert >2 bzw. >2*Wurzel(p/n) mit P=Anzahl der Parameter
und n=Anzahl der Beobachtungen, dann handelt es sich um einen Ausreißer
bzw. eine auffällige Abweichung.
FG
= Freiheitsgrade.
Fishers Exakter Test für Vierfeldertafel; testet die Unabhängigkeits- (und nur bei diesem
Modell gleichzeitig die Homogenitätshypothese) im hypergeometrischen
Modell; wird auch für andere Modelle (multinomial, produkt-binomial)
genutzt, dann stimmt die Aussage aber nicht mehrexekt; da dieser Test
konservativ auf nicht vorhandene Voraussetzungen reagiert, ist bleibt die
positive Signifikanzaussage zumindest gesichert.
H0: Faktor A und Faktor B sind stochastisch unabhängig.
Functions
SAS-Functions sind durch angehängte ( ) gekennzeichnet, die die Argumente
enthalten, die an die Funktion übergeben werden; das Ergebnis der Funktion
wird an eine Variable übergeben;
z.B. erg=MIN_(x1,_x2,_x3,_x4)
Argumente als Liste
erg=MIN_(OF_x1-x4)
Argumente als array
Globalvariable: auch als Makrovariable bezeichnet; kann im DATA-Step mit CALL
SYMPUT und außerhalb eines DATA-Steps mit %LET definiert werden;
Aufruf der Variablen im nachfolgenden Programm mit &....
(Beispiel: Globalvariable wurde mit %LET_vg=123 definiert; Aufruf dann in
z.B. PROC PLAN seed=&vg;); wenn in einem DATA-Step der Text-Inhalt
einer G.-variable an eine andere Varaible übergeben werden soll, so muß die
G.-variable in doppelten Hochkommas stehen; Ohne Hochkommas wird der
Text -Inhalt der G.-variable als neue(r) Variable(nnamem) verwendet;
in einem Dateiaufruf für ein SAS-Dataset kann in &v1 der Dateiname +
Libname enthalten sein.)
Durch einfaches Anhängen einer Globalvarable können neue Variablennamen
konstruiert werden.
Hazard-Modell
Import
Daten-Import; z.B. von EXCEL siehe Beispiel 5b.
Kappa-Koeffizient: (Assoziationsmaß) Maßzahl für den Grad der Übereinstimmung
zwischen den beiden Einstufungen zweier (abhängiger) Stichproben einer a)
dichotom, bzw. b) mit s Kategorien erhobener Zielvariablen; 0 kennzeichnet
Unabhängigkeit, 1 perfekte Übereinstimmung der beiden Einstufungen (nur
sinnvoll mit Betrachtung des KI für Kappa).
'Simple Kap
Kolmogorov-Smirnow-Test (in SAS) Test auf Normalverteilung bei beliebigem µ und
sigma²; wird in der PROC UNIVARIATE bei Stichproben vom Umfang
n>2000 verwendet; im Output wird die Teststatistik D und deren
Überschreitungswahrscheinlich-keit Prob>D angegeben; H0 'es liegt
Normalverteilung vor'.
Algemein: testet auf Vorliegen einer bestimmten Verteilung (vollständig
spezifiziert; es gibt Varianten für unvollständig spezifizierte Hypothesen); dazu
werden empirische und theoretische Verteilungsfunktion miteinander
verglichen.
Kontingenzkoeffizient (nach Pearson) für r*s - Kontingenztafeln; bei gegebenen
Randhäufigkeiten ist der Koeffizient =0 bei Unabhängigkeit und =1 bei
maximaler Abhängigkeit; wird über den Chi²-Wert bestimmt, kann auch mit
relativen Häufigkeiten berechnet werden; die absolute Höhe des Koeffizienten
hängt von der Anzahl Spalten und Zeilen abe: um verschiedene Tafeln
vergleichen zu können, muß der Koeffizient korrigiert werden!
Kontraste
beim Vergleich von Mittelwerten; es werden lineare Kontraste betrachtet:
Grundlage sind Summenbeziehungen zwischen den betrachteten Mittelwerten,
wobei auf einer Seite des Gleichheitszeichens die Null steht; der Kontrast wird
dann durch die Vorfaktoren der einzelnen Summanden (jeder Summand
besteht aus Vorfaktor und einem Mittelwert) definiert.
Korrelation
"typische" Korrelation = Maßkorrelation nach Bravais-Pearson.
Korrelationsanalyse untersucht, ob überhaupt ein Zusammenhang zwischen (zwei)
Variablen besteht, und bestimmt die Stärke des Zusammenhangs.
Kovariable
Merkmal, das in einem (Quasi-)Experiment weder abhängige noch
unabhängige Variable ist, sondern nur miterhoben wird, um im Nachhinein
prüfen zu können, ob es einen Einfluß auf das Untersuchungsergebnis hatte.
Kovarianzanalyse
Verfahren zur Überprüfung der Bedeutsamkeit einer Kovariablen für
eine Untersuchung. Der Einfluß dieser Variablen wird neutralisiert; hat nichts
mit Kovarianzen zu tun.
Kreuzvalidierung (in der PROC DISCRIM mit der Option crossvalidate; ->
Diskriminanzanalyse) n-1 der Beobachtungen werden als Lernstichprobe
verwendet um eine Zuordnungsvorschrift für die vorgegebenen Klassen zu
bestimmen; die verbleibende Beobachtung wird dann mit dieser Vorschrift
einer Klasse zugeordnet; dies wird für jede Beobachtung durchgeführt;
Fehlklassifikationen werden gekennzeichnet bzw. gelistet.
Kruskal-Wallis-Test
Link-Funktion
Logistische Regression
modelliert (Erkrankungs-)Wahrscheinlichkeiten; gehört zur
Gruppe der Verallgemeinerten (Generalisierten) Linearen Modelle; LinkFunktion ist die Logit-Funktion; die Zielvariable Y ist dichotom skaliert, kann
nur die Werte 0 und 1 annehmen; die Einflußgrößen (werden alle Kovariablen
genannt) können beliebig skaliert sein; kann nur Odds-Ratios schätzen, keine
(adjustierten) Relative Risks; bei stetigen Einflußvariablen muß die OR anders
interpretiert werden: die OR gibt hier den Faktor für die Änderung des
Chancenverhält-nisses bei Änderung der Einflußvariable um eine Einheit die
logistische Regression arbeitet nicht nach dem Kleinste-Quadrate-Prinzip,
sondern nach dem Maximum-Likelihood-Prinzip: dieser Schätzer ist nur
asymptotisch erwartungstreu: niedrige Zellbesetzungen bei den
Faktorkombinationen wirken sich sehr nachteilig auf die Asymptotik aus.
Im SAS-Output (PROC LOGISTIC) wird die Güte des Modells unter "ChiSquare of Covariates" angegeben: getestete H0 'das Modell paßt perfekt; die
im Modell geschätzten Werte stimmen mit den beobachteten alle exakt
überein'.
In PROC GENMOD können zufällige und fixe Einflußfaktoren unterschieden
werden.
major
siehe tickmarks.
Mantel-Haenszel-Test (auch Cochran-Mantel-Haenszel-Test): spezielle Variation des Chi²Tests, um auf Unababhängigkeit in drei-dimensionalen Kontingenztafeln zu
testen. (SAS: mit CMH-Option (Zusatz-Statement: EXACT_mhchi) in PROC
FREQ mit TABLES-Statement; Ausgabe der Teststatistik in der Tabelle
„Cochran-Mantel-Haenszel Statistics“ in der Zeile „General Association“);
Mantel-Haenszel-Chi²- Test:
kann nur ordinal skalierte Merkmale testen; testet auf
Unabhängigkeit zweier Einflußgrößen (Kontingenztafel); (SAS: 1.) mit
CHISQ-Option in PROC FREQ mit TABLES-Statement; oder 2.) mit CMHOption (Zusatz-Statement: EXACT_mhchi) in PROC FREQ mit TABLESStatement; Ausgabe der Teststatistik in der Tabelle „Cochran-Mantel-Haenszel
Statistics“ in der Zeile „Nonzero Correlation“); basiert auf dem Pearsonschen
Korrelationskoeffizienten von Zeilenscores und Spaltenscores.
H0: 'kein Zusammenhang zwischen Zeilen- und Spaltenvariable' bzw. 'es liegt
keine "Korrelation" zwischen den zwei Merkmalen vor'
gegen H1 ‚es liegt ein linearer Trend vor‘.
Marke
siehe Sprungmarke
Maßkorrelation (nach Bravais-Pearson) betrachtet den Zusammenhang zwischen zwei
Variablen (metrisch); entspricht der standardisierten Kovarianz; erfaßt nur
linearem Zusammenhang; Wertebereich zwischen -1 und 1 (ist standardisiert);
0 = keine Korelation;
Mc-Nemar-Test: (bei Vierfeldertafeln) für Vergleich von zwei abhängigen Stichproben X
und Y mit dichotom (die Merkmale sind mit 0 und 1 codiert)erhobener
Zielvariable. (Test auf Symmetrie zur 1. Hauptdiagonalen); H0: 'es liegt
Symmetrie zur Hauptdiagonalen vor' oder 'P(X=1)=P(Y=1)'
(Wahrscheinlichkeit für X=1 ist gleich der Wahrsch. Y=1).
midpoints
Option für den Befehl VBAR, um die Klassenmitten für die grafische
Darstellung festzulegen: VBAR_v1_/_midpoints_=_a_TO_b_BY_c : Werte
von a bis b mit Schrittweite c;
minor
siehe tickmarks.
MSE
mit N-k FG geschätzte, nicht erklärte Rest(Fehler-)streuung: MSE=SSE/(N-k)
mit N=Gesamtstichprobenumfang, k=Anzahl der Unterschiedenen Gruppen
bzw. Faktorstufen; die Wurzel aus MSE (= Root-MSE) ist der Standardfehler
des Modells.
MSM
mit k-1 FG geschätzte, durch das Modell Streuung: MSM=SSM/(k-1) mit
N=Gesamtstichprobenumfang, k=Anzahl der Unterschiedenen Gruppen bzw.
Faktorstufen.
MST
mit N-1 FG geschätzte Gesamtstreuung: MST=SST/(N-1) mit
N=Gesamtstichprobenumfang.
Newman-Keuls-Test
Odds Ratio
ähnlich wie Tukey-Test aber mit gestaffelten Grenzdifferenzen.
bestimmt das Chancenverhältnis zwischen exponiert zu erkranken und nicht
exponiert zu erkranken:
berechnet aber auch das relative Chancenverhältnis zwischen den Spalten einer
Vierfeldertafel (Ouotient aus den Relative Risks).
Overdispersion (siehe Underdispersion)
Pearson
-> Maßkorrelation nach Bravais-Pearson
Pearsonscher Kontingenzkoeffizient (siehe Kontingenzkoeffizient)
Produkt-Binomial-Modell Randhäufigkeiten von Faktor oder von Faktor B werden
vorgegeben (bei Fallkontrollstudien sind dies die Erkrankungen, bei
prästratifizierten Kohortenstudien ist dies die Exposition); hier kann nur die
Homogenitätshypothes (nicht die Unabhängigkeitshypothese) überprüft
werden: H0 'die Binomialwahrscheinlichkeiten in den Gruppen ist gleich' z.B.
mit em Chi²-Test in PROC FREQ mit TABLES..../_chisq;
Porportional-Hazard-Modell
bei zwei Hazard-Verteilungen über die Zeit wird
angenommen, daß beide die gleiche Verteilungsform haben und daß ein
Proportionalitätsfaktor für den gesamten betrachteten Zeitraum gilt.
Prüfglied
?
Rangkorrelation wie Maßkorrelation nach Bravais-Pearson, aber mit den Rängen der
Beobachtungen für die einzelnen Variablen (ordinal); prüft auf einen
monotonen Zusammenhang; Wertebereich -1 bis 1; 0 = kein Zusammenhang.
Regressionsanalyse
untersucht die gerichtete Zusammenhangsstruktur zwischen (zwei)
Variablen; dabei muß bekannt sein, welches die Zielvariable ist; (siehe auch
Streuungszerlegung).
Relative Risk (RR) Quotient aus zwei Wahrscheinlichkeiten; mit RR=1 sind beide
Wahrscheinlichkeiten gleich groß
R-Square
Anteil erklärter Varianz
scores
werden verwendet, um kategorial (in der Regel ordinal) skalierten Variablen
eine Intervallskala "überzustülpen"; in SAS werden, falls scores für eine
Statistik verwendet werden, automatisch die Codierungswerte (der kategorial
skalierten Variablen) als scores übernommen.
Scree-Plot
graphische Darstellung zur Hauptkomponentenanalyse (PCA); es werden die
Eigenwerte der Hauptkomponente gegen die Nr. der Hauptkomponente
aufgetragen.
Shapiro-Wilk-Test Test auf Normalverteilung bei beliebigem µ und sigma²; wird in der
PROC UNIVARIATE bei Stichproben vom Umfang n<=2000 verwendet; im
Output wird die Teststatistik W und deren "Unter"-schreitungswahrscheinlichkeit Prob<W angegeben; kleine Werte führen hier zur Ablehnung von H0.
Dieser Test setzt Homoskedastizität bei den Werten voraus.
sidak
bewirkt eine Adjustierung der Überschreitungswahrscheinlichkeit nach Sidak
bei paarweisem t-Test (α=0.05 wird dann für das gesamte Experiment
eingehalten).
in PROC_ANOVA mit MEANS_vname_/_sidak;
single
= Single Linkage: Methode der hierarchischen Clusterbildung; Kriterium:
minimale Distanz zwischen einem Punkt aus Cluster a und einem Punkt aus
Cluster b:
Sprungmarke neuer Startpunkt für die Weiterführung des Programms; Syntax: Name der
Sprungmarke mit angehängtem ':' in einer Zeile des Programmtextes; darunter
wird das Programm fortgeführt; Verweis auf die Sprungmarke mit GOTO;
(Beispiel: Anweisung GOTO punkt1; Sprungmarkenzeile punkt1: ).
SSE
Summe der Fehlerstreuungen einer Zielvariablen.
SSM
Summe der durch das Modell erklärten Streuung.
SST
Gesamtstreuung einer Zielvariablen (in einem Regressionsmodell).
Standardfehler
für ein Modell; ist gleich der Wurzel aus dem MSE.
Streuungszerlegung
bei Regressionsmodellen; die Gesamtstreuung (SST) der
Beobachtungen wird in einen durch das Modell erklärten Ateil (SSM) und eine
Reststreuung (SSE: Fehlerstreuung) zerlegt; für eine Schätzung dieser Anteile
müssen die Freiheitsgrade berücksichtigt werden: für SST = SSM + SSE mit
N-1 = k-1 + N-k Freiheitsgraden (mit N=Gesamtstichprobenumfang, k=Anzahl
der Unterschiedenen Gruppen bzw. Faktorstufen) ergibt sich dann MST =
MSM + MSE, wobei M jeweils für mean steht (MSE = Varianz im engeren
Sinne). Je nach Typ der Streuungszerlegung unterscheidet man
Typ I
die Zerlegung ist nicht symmetrisch, das Ergebnis hängt von der
Reihenfolge der Faktoren im Modell ab, sie führt aber in jedem Fall
zu einer auf die Modellannahmen begründete, vollständige
Zerlegung der Gesamtvarianz.
Typ III die Zerlegung ist symmetrisch, das Ergebnis hängt nicht von der
Reihenfolge der Faktoren im Modell ab; die Gesamtvarianz wird
aber nicht vollständig durch die Modellkomponenten (Faktoren,
Wechselwirkung, Fehler) zerlegt, es bleibt ein Teil der
Gesamtvarianz übrig, der in der Summe der durch das Modell
erklärten (einschließlich Fehlerterm) nicht erfaßt wird.
t
bewirkt einen multiplen t-Test (paarweiser Vergleich der einzelnen Prüfglieder
(Klassen): α=0.05 gilt nur für die einzelnen paarweisen Vergleiche);
in PROC_ANOVA mit MEANS_vname_/_t;
t-Test
testet auf Gleichheit der Mittelwerte von zwei unverbundenen Stichproben;
Voraussetzungen: gleiche, aber unbekannte Varianzen, Normalverteilung; der
Test bekommt geringe Schwierigkeiten bei Abweichungen von der
Normalverteil-ungsannahme, große Schwierigkeiten mit schiefen Verteilungen,
sehr große Schwierigkeiten bei bimodalen (bzw. nicht unimodalen)
Verteilungen.
Studienmodell
Multinomial-, Produkt-Binomial-, Hypergeometrisches. und PoissonModell.
tickmarks
major t. sind Achseneinteilungen mit Beschriftung; minor t. ohne Beschriftung
liegen zwischen den major t.; werden mit AXIS_minor=... und _order=...
festgelegt.
tukey
bewirkt einen multiplen Test nach Tukey (auch Tukey-Kramer-Test):
(paarweiser Vergleich der einzelnen Prüfglieder (Klassen)) mit Adjustierung
(α=0.05 gilt dann für das gesamte Experiment); hier wird eine zwischen den
Mittelwerten zulässige Grenzdifferenz mit Konfidenzintervall bestimmt; liegt 0
(Null) in diesem Intervall, muß H0 beibehalten werden bzw. sind die
Mittelwerte nicht signifikant verschieden.
in PROC_ANOVA mit MEANS_vname_/_tukey;.
unbalanciert (siehe balanciert) in SAS werden Teststatistiken für unbalancierte Daten unter
TYPE III ausgegeben.
Underdispersion
bei der Poissonregression kann es vorkommen, daß die Varianz der
Stichprobe deutlich von der theoretischen Varianz (hier Poissonverteilung)
abweicht (dies wird in der Regel dadurch verursacht, daß die Nullklasse
stärker/schwächer besetzt ist als theoretisch erwartet); die Abweichung wird
anhand von Dispersionsmaßen bestimmt: <1 entspricht underdiperson, >1
overdispersion; bei der Poissonregression wird häufig der Quotient aus
Deviance/Freiheitsgrade bzw. Pearson-Chi²/Freiheitsgerade genutzt (bei dem
Vorliegen einer Poissonverteilung sind Varianz und Erwartungswert gleich);
Faustregel: <9/10 = underdispersion (es liegt eher eine Binomialverteilung vor;
kann aber mit Poissonverteilung gefittet werden), >10/9 = overdispersion (hier
können Negative Binomialverteilungen gefittet werden). SAS: in PROC
GENMOD kann bei underdispersion mit der Option ‚dspace‘ oder ‚pspace‘ der
Skalierungsfaktor, bei overdispersion die Verteilungsannahme zu ‚dist=nb‘
(negative Binomialvtlg.) geändert werden.
Varianz
einer Zielvariable Y ist der Erwartungswert der quadrierten Abweichungen der
Beobachtungen vom Mittelwert von Y.
Varianzanalyse die Zielvariable ist eine stetige, metrische Zufalssvariable (ZV); im Modell
werden zufällige und fixe Effekte (und eventuell Kovariablen: -> dann
Kovarianzanalyse) unterschieden; beide Effekten werden mit kategorialen
Daten bedient; zufällige Effekte gehen von stetigen, normalverteilten ZV aus,
die nach Quantilen (-> gleiche Häufigkeiten in den Kategorien) klassiert
werden.
Varianzzerlegung
siehe Streuungszerlegung.
Verallgemeinerte Lineare Modelle (in SAS: mit GENMOD, LOGISTIK, CATMOD, GLIM,
nicht mit GLM)
Wilcoxon-Rangsummen-Test
prüft auf Gleichheit der Mediane zweier unabhaägiger
Stichproben; nicht-parametrisches Verfahren; keine Verteilungsannahme, aber
Verteilungen müssen gleich schief sein; Umfang der Stichproben kann
unterschiedlich sein;
in SAS in der Procedure NPAR1WAY mit der Option wilcoxon; bei mehr als
zwei Stichproben wird ein Kruskal-Wallis Test durchgeführt.
Biom.Einf. 48
Wilcoxon-Vorzeichen-Rangtest
prüft, ob der Median einer Stichprobe oder ob die
Differenz der Mediane zweier verbundener Stichproben einen bestimmten
Wert hat; nicht-parametrisches, verteilungsfreies Verfahren;
Biom.Einf. 47
Yulescher Assoziationskoeffizient (siehe Assoziationskoeffizient)
Beispiel 1a:
%LET text1=text_A text_B
%LET anzahl=b;
%MACRO les1;
%SCAN(&text1, &i, ' ')
%MEND les1;
%MACRO run1;
%DO i=1 %TO &anzahl;
PROC SQL;
SELECT *
FROM lib.%les1
;
QUIT;
%END;
%MEND run1;
%run1;
text_C;
liest jeweils den i-ten String von
text1 ein (Strings durch dopplte Leerzeichen
getrennt.
führt b-mal die Schleife aus
Beispiel 1b:
%LET text1=text_A text_B text_C;
%LET anzahl=b;
%MACRO les1;
%SCAN(&text1, &i, ' ')
%MEND les1;
%MACRO run1;
%DO i=1 %TO &anzahl;
wie oben.
PROC SQL;
CREATE VIEW lib.v1 AS hier wird die Globalvariable ohne folgenden
SELECT *
SQL-Befehl abgearbeitet; der VIEW klappt so
FROM a.%les1
und kann dann unten im Programm aufgerufen
;
werden.
QUIT;
PROC SQL;
SELECT *
FROM lib.v1
Aufruf des VIEW.
WHERE v1=a
;
QUIT;
%END;
%MEND run1;
%run1;
Beispiel 1c:
LIBNAME m 'S:\Langner\muell\';
DATA m.test;
INPUT nr tx1$ a b c;
CARDS;
1 eins 10 11 101
2 zwei 20 22 202
3 drei 30 33 303
4 vier 40 44 404
5 fünf 50 55 505
6 xxxx . . .
7 null 0 0 00
RUN;
PROC PRINT data=m.test; RUN;
%MACRO maki1(no,tex,aa);
&no=&no+100;
&tex=SUBSTR(&tex,2,2);
&aa=&aa+1000;
%MEND maki1;
DATA m.muell;
SET m.test;
%maki1(nr,tx1,a);
RUN;
PROC PRINT data=m.muell; RUN;
Beispiel 2a
DATA dname;
RETAIN v3 v2 v1;
SET dalt;
RUN;
ändert die ursprüngliche Reihenfolge der
Variablen in dalt (v1, v2, v3) in die
Reihenfolge v3, v2, v1 in dname
Beispiel 2b:
PROC SQL;
CREATE TABLE dname AS
SELECT v3, v2, v1;
FROM dalt
;
QUIT;
ändert die ursprüngliche Reihenfolge der
Variablen in dalt (v1, v2, v3) in die
Reihenfolge v3, v2, v1 in dname
Beispiel 3:
%LET tx1=sum_vb3a;
%LET tx3=neu;
%MACRO les1;
%SCAN(&tx1, 2, '_')
%MEND les1;
DATA _NULL_;
h1="%les1";
h2=h1||'_q';
CALL SYMPUT ('tx2', h2);
h4="&tx3"||'_neu';
CALL SYMPUT ('tx4', h4);
RUN;
DATA test;
&tx2=wert;
&tx4=wert;
OUTPUT;
RUN;
liest von tx1 den Teilstring hinter dem ‘_‘.
an h1 wird über das Macro ein Teilstring
der G.-variable tx1 übergeben.
Konstruktion eines neuen Strings.
Übertragen des Strings in die G.-variable tx2
Konstruktion eines neuen Strings.
Übertragen des Strings in die G.-variable tx4
Verwendung des Inhalts von tx2 und tx4 als
Variable(nnamen).
zu Beispiel 4
MERGE - Statement:
Folgendes ist dabei zu beachten (siehe auch Beispielprogramm 4 weiter unten):
1. die längste (= Anzahl der Datenzeilen) der gemergten Tabellen bestimmt die
Länge der neuen Tabelle; bei der Verwendung von BY wird die Länge der
neuen Tabelle als Anzahl der Datenzeilen (DZ) mit Übereinstimmung + Anzahl
der DZ ohne Übereinstimmung aus Tabelle 1 + .... + Anzahl der DZ ohne
Übereinstimmung aus Tabelle n.
2. die Variablen der neuen Tabelle setzten sich aus den übereinstimmenden
Variablen(namen) der alten Tabellen + die nicht übereinstimmenden aus jeder
der alten Tabellen zusammen (jeder Var.-name taucht nur einmal auf); in die
Variablen der neuen Tabelle werden immer (auch bei gleichlautenden
Variablennamen in den zu mergenden Tabellen) die Daten der in der MERGEZeile zuletzt genannten Tabelle, die noch Werte für die betreffende Datenzeile
besitzt, übernommen; Achtung! dies beides gilt auch bei der Verwendung von
BY (siehe 4.)
3. ohne BY werden die zu mergenden Tabellen parallel zeilenweise abgearbeitet,
also jeweils die n-ten Zeilen miteinander kombiniert.
4. mit BY: folgendes Beispiel: Tabelle A und B sollen anhand der BY-Variable v
zur Tabelle C gemerged werden:
MERGE A B;
(die Länge von C Æ siehe 1.; Anzahl der Variablen von C Æ siehe 2)
SAS geht so vor:
A und B werden zeilenweise abgearbeitet:
- ungleiche v werden nacheinander in C eingefügt, wobei die eine Datei
jeweils so lange an der Reihe ist, bis der von der anderen Datei
vorgegebene Wert der BY-Variable v überschritten wird.
- bei gleichen v gilt zunächst 2. (siehe oben);
- falls in B die Werte zu v nur einmal auftauchen, in A aber mehrmals,
dann werden für die erste gemergte Zeile bei den gleichlautenden
Variablen die Werte von B übernommen und erst für die folgenden
Zeilen die von A
- falls in A und in B der gleiche Wert für v in mehreren Zeilen auftritt, so
wird die 1. dieser Zeilen aus A mit der 1. der Zeilen aus B verknüpft,
2. aus A mit 2. aus B, und so weiter, bis in einer Datei ein höherer
Wert für v auftritt: dann wird in dieser Datei die letzte Datenzeile für
die Verknüpfung beibehalten, bis die übrigen Zeilen der anderen Datei
mit gleichem v abgearbeitet sind.
Beispiel 4:
/************ Beispieldaten ********************/
DATA a;
INPUT a b c @@;
CARDS;
0 2 3 1 2 3 1 2 3 1 2 3 4 5 6
RUN;
DATA b;
INPUT a b c @@;
CARDS;
1 1 8 1 1 77 2 2 8 2 2 77
RUN;
DATA c;
INPUT a b e @@;
CARDS;
. 9999 9999 1 11 111 1 88 888 3 33 333 5 55 555 6 66 666
RUN;
TITLE 'Datei A';
PROC PRINT data=a;
RUN;
TITLE 'Datei B';
PROC PRINT data=b;
RUN;
TITLE 'Datei C';
PROC PRINT data=c;
RUN;
/************************************************/
TITLE 'Mergen von Datei A mit Datei B';
DATA test;
MERGE a b;
RUN;
PROC PRINT data=test;
RUN;
TITLE 'Mergen von Datei B mit Datei A';
DATA test;
MERGE b a;
RUN;
PROC PRINT data=test;
RUN;
TITLE 'Mergen von Datei A mit Datei C';
DATA test;
MERGE a c;
RUN;
PROC PRINT data=test;
RUN;
TITLE 'Mergen von Datei C mit Datei A';
DATA test;
MERGE c a;
RUN;
PROC PRINT data=test;
RUN;
TITLE 'Mergen von Datei A mit Datei C mit BY a';
DATA test;
MERGE a c;
BY a;
RUN;
PROC PRINT data=test;
RUN;
TITLE 'Mergen von Datei C mit Datei A mit BY a';
DATA test;
MERGE c a;
BY a;
RUN;
PROC PRINT data=test;
RUN;
Beispiel 5a:
Daten-Export nach EXCEL mit FILENAME und PUT
Folgende Vorbereitungen für den Export eines permanenten SAS-Datasets nach EXCEL
müssen getroffen werden:
1.
Änderung der Ländereinstellung auf USA, bzw. ‘.‘ als Trennzeichen für Nullstellen
angeben.
2.
EXCEL muß geöffnet sein und eine leere Tabelle enthalten.
Achtung: Probleme bereiten Variablen mit Fließtext; hier werden Leerzeichen als
Trennzeichen zwischen Variablen erkannt; dann die Option notab verwenden (siehe Beispiel
5d)
FILENAME export DDE'excel | Tabelle1!z1s1:zasb'; * a = Anzahl Zeilen,
b = Anzahl Spalten der
zu bildenden Tabelle ;
DATA _null_;
SET libname.dname;
* dname = die zu exportierende Datei ;
FILE export;
PUT v1 v2 v5-v8;
* hier müssen alle zu exportierenden
Variablen aufgeführt werden; Reihenfolge!;
RUN;
Beispiel 5b:
Daten-Import von EXCEL nach SAS mit SQL
Einige wichtige Punkte:
- die erste Datenzeile der EXCEL-Datei wird für die Variablennamen verwendet
- in der FROM...-Zeile wird der Tabellenname aus der EXCEL-Arbeitsmappe (ÆDatei) mit
angehängtem $-Zeichen und in eckigen Klammern [] angegeben
PROC SQL;
CONNECT TO odbc (required);
CREATE TABLE libname.dname AS
SELECT *
FROM CONNECTION TO odbc(SELECT *
FROM [tabelle1$])
;
DISCONNECT FROM odbc;
QUIT;
Beispiel 5c:
Daten-Import von EXCEL nach SAS mit FILENAME und INPUT
In der FILENAME-Zeile muß folgendes ergänzt werden:
- pfadname wird durch den vollständigen Pfad für die betreffende EXCELdatei ersetzt
- datei
wird durch den Namen der EXCEL-Datei ersetzt
- Tabelle1
wird durch den EXCEL-Tabellennamen ersetzt
- a, b, c, d
werden durch die Zeilen- und Spaltennummern (alles Zahlen) der EXCELTabelle ersetzt, die den einzulesenden Datenblock begrenzen
FILENAME import DDE "excel|pfadname\[datei.xls]Tabelle1!zasb:zcsd";
DATA dname;
INFILE import dlm='09'x notab dsd missover;
INPUT v1 v2 vtext$ v3;
RUN;
Beispiel 5d:
Datenexport nach EXCEL mit FILENAME und PUT
DATA dname;
INPUT v1 vtext$15.
CARDS;
1 text1 test test
2 text2
test
3 text3 test 33
4 x x x test
4
RUN;
v3;
11
22
33
44
PROC PRINT data=dname; RUN;
FILENAME export DDE "excel | Tabelle1!z2s2:z6s4" notab;
* notab gewährleistet, daß strings vollständig übergeben werden;
DATA _null_;
SET dname;
FILE export;
PUT v1 '09'x vtext '09'x v3;
* ‘09‘x fügt die durch notab entfernte
Trennung zwischen den Variablen wieder
ein ;
RUN;
*******************************************************;
*** ohne notab würde das Ergebnis so aus sehen ***;
FILENAME export DDE "excel | Tabelle1!z2s2:z6s20";
DATA _null_;
SET dname;
FILE export;
PUT v1 vtext v3;
RUN;
Beispiel 6:
Daten-Export nach EXCEL mit PROC DBLOAD
DATA test;
INPUT eins zwei drei;
LINES;
1 2 3
4 5 6
7 8 9
RUN;
PROC DBLOAD DBMS=EXCEL DATA=WORK.TEST;
PATH='e:\test.xls';
PUTNAMES YES;
LIMIT=0;
LOAD;
RUN;
Beispiel 7:
Verknüpfen von Dateiauszügen mit UNION (SQL)
Klappt nicht: es werden nicht alle möglichen Datenzeilen in die neue Datei übernommen!
%LET d4=m.hallo;
DATA &d4;
INPUT stoff_1-stoff_6;
CARDS;
1 2 3 4 5 6
2 3 6 7 8 .
5 . . . . .
1 5 6 . . .
4 5 6 7 . .
1 2 4 5 6 7
1 2 4 5 7 8
1 2 3 4 5 6
1 2 3 4 5 6
6 . . . . .
6 . . . . .
RUN;
PROC PRINT data=&d4; RUN;
PROC SQL;
CREATE TABLE m.f2 AS
SELECT stoff_1 AS
FROM &d4
GROUP BY stoff_1
UNION
SELECT stoff_2 AS
FROM &d4
GROUP BY stoff_2
UNION
SELECT stoff_3 AS
FROM &d4
GROUP BY stoff_3
UNION
SELECT stoff_4 AS
FROM &d4
GROUP BY stoff_4
UNION
SELECT stoff_5 AS
FROM &d4
GROUP BY stoff_5
UNION
SELECT stoff_6 AS
FROM &d4
GROUP BY stoff_6
;
QUIT;
stoff, count(stoff_1) AS anz_stof
stoff, count(stoff_2) AS anz_stof
stoff, count(stoff_3) AS anz_stof
stoff, count(stoff_4) AS anz_stof
stoff, count(stoff_5) AS anz_stof
stoff, count(stoff_6) AS anz_stof
Beispiel 8:
PROC TRANSPOSE
DATA m.test;
INPUT a b c d;
CARDS;
1 11 111 1
1 11 111 2
1 11 112 3
1 12 121 4
1 12 122 5
1 12 122 6
2 21 211 7
2 21 212 8
2 21 213 9
2 22 221 10
2 22 221 11
2 22 221 12
RUN;
PROC PRINT data=m.test; RUN;
PROC TRANSPOSE data=m.test out=m.tset;
VAR d;
RUN;
PROC PRINT data=m.tset; RUN;
PROC TRANSPOSE data=m.test out=m.tset;
VAR a d;
RUN;
PROC PRINT data=m.tset; RUN;
PROC TRANSPOSE data=m.test out=m.tset;
VAR d;
BY a;
RUN;
PROC PRINT data=m.tset; RUN;
PROC TRANSPOSE data=m.test out=m.tset;
VAR d;
BY a c;
RUN;
PROC PRINT data=m.tset; RUN;
PROC TRANSPOSE data=m.test out=m.tset;
VAR c d;
BY a b;
RUN;
PROC PRINT data=m.tset; RUN;
PROC TRANSPOSE data=m.test out=m.tset;
VAR c;
BY d;
RUN;
PROC PRINT data=m.tset; RUN;
Beispiel 9:
%STR
%LET tx1='test1';
%LET tx2=%str(test2);
DATA m.m1;
test2='hallo';
OUTPUT;
RUN;
TITLE "Versuch mal &tx2 zu sagen"; /** Hier wird 'test2' als Text **/
/** im Titel ausgegeben **/
DATA m.muell;
SET m.m1;
text1=&tx1;
/** text1 erhält den Eintrag 'test1' **/
text2=&tx2;
/** text2 erhält den Wert der Variablen test2,
/** also 'hallo'. **/
RUN;
PROC PRINT data=m.muell; RUN;
Beispiel 10:
%ARRAY
und
data new;
set old;
array abc{*} _character_;
array def{*} _numeric_;
length name $8;
do i=1 to dim(abc);
call vname(abc{i},name);
call label(abc{i},name);
output;
end;
do j=1 to dim(def);
call vname(def{j},name);
call label(def{j},name);
output;
end;
stop;
run;
CALL VNAME
und
CALL LABEL
/* all character variables in old
/* all numeric variables in old
/* name is not in either array
*/
*/
*/
/* get name of character variable */
/* get label of character variable */
/* write name to an observation
*/
/* get name of numeric variable
/* get label of numeric variable
/* write name to an observation
*/
*/
*/
Copyright (c) 1995, SAS Institute Inc., Cary, NC 27513-2414 USA.
rights reserved.
All
Beispiel 11:
SYMGET
und
%STR
OPTIONS symbolgen;
%LET h1=10; *** erstmalige Definition der Makrovar. h1 ***;
%LET h2=h1_1=&h1.;
%LET h3 = %str (h1_2= symget ( 'h1' ) ) ;
%LET h4 =h1_3=input(trim(left(%str(symget('h1')),best.) ;
%LET h5 = %str (h1_4= 1-1+ symget ( 'h1' ) ) ;
%LET h1=20; *** Änderung des Wertes der Makrovariable h1 ***;
DATA h;
&h2.;
*** hier wirkt sich die Änderung nicht aus ***;
&h3.;
*** hier wirkt sich die Änderung aus ***;
*** ACHTUNG: h1_2 wird Character-Variable ***;
&h4.;
*** hier wirkt sich die Änderung aus ***;
&h5.;
*** hier wirkt sich die Änderung aus ***;
*** allein durch die mathematischen Operatoren wird
verhindert, dass h1_4 zur Character-Var. wird
***;
RUN;
PROC CONTENTS data=h; RUN;
PROC PRINT data=h; RUN;
Beispiel 12:
PROC GENMOD und
selbst definierte Link-Funktion
Im unten aufgeführten Syntaxbeispiel steht in der Definition der Link-Funktion die
Systemvariable _mean_ für die Zielvariable und in der Definition der Inversen der LinkFunktion steht _xbeta_ für den linearen Predictor.
Das Beispiel stellt die logistische Regression nach.
PROC GENMOD data=h;
MODEL y=x1 ;
FWDLINK link=log(_mean_/(1-_mean_));
INVLINK ilink=exp(_xbeta_)/(1+exp(_xbeta_));
RUN;
Herunterladen