PROC REG - Variablennamen bei deutschsprachiger SAS-Installation

Liebe Redscope-Community,

ich traue mich jetzt einfach mal und schreibe hier den ersten Beitrag :-)

Mit PROC REG (SAS-Prozedur für lineare Regression) kann man über die Option OUTEST= ein SAS-Dataset mit Schätzwerten für die Regressionsparameter ausgeben lassen. Also z.B.

PROC REG DATA=MeineEingabeDatei OUTEST=MeineAusgabeDatei;
MODEL Dependent = Predictor;
RUN;

Die mit OUTEST= erzeugte Datei enthält Schätzwerte für den Intercept und den Predictor. Zu meiner Überraschung habe ich festgestellt, dass der Name der Variable für den Intercept anscheinend sprachabhängig ist:

- Mit einer englischsprachigen SAS-Installation heißt diese Variable "Intercept"
- Mit einer deutschsprachigen SAS-Installation heißt die Variable aber "Konstante"!

Da ich die erzeugte Ausgabedatei im Rahmen eines SAS-Programms weiter verwenden will, kommt es daraufhin u.U. zu Problemen, weil die benötigte Variable fehlt...

Meine Fragen hierzu:
- Gibt es eine Option für PROC REG bzw. eine globale Option, mit der man den Variablennamen für den Intercept einstellen kann?
- Tritt dieses Verhalten auch bei anderen SAS-Prozeduren bzw. bei anderen Installationssprachen auf?

In den SAS-Notes habe ich zu diesem Thema nichts gefunden, und auch die Hotline konnte mir bisher nicht weiterhelfen.

Im Voraus schon mal vielen Dank für hoffentlich zahlreiche Antworten!

Unterstützende Meinung: Namen der Variablen

Der beschrieben Workaround ist sehr schön (und technisch lernt man ja was dazu), aber ich unterstütze die Meinug von Hr. Haffner, dass solche "Eigenschaften" des System übergeordnet gesteuert werden müssen (hoffen wir mal, das SAS das eingeplant hat :-), damit plattformunabhängig programmiert werden kann.

Neues von der SAS-Hotline

Von der SAS-Hotline habe ich immerhin auch eine Antwort bekommen (die ich jetzt allerdings erst mit etwas Verspätung hierhin poste, sorry):

Wenn man im Config-File (sasv9.cfg bzw. ein individuelles Config-File) im Abschnitt "-MSG" den Verweis auf "!sasext1\de\sasmsg" (deutsche Texte) entfernt, sind alle Texte im Log wieder auf Englisch. Auch der Variablenname heißt dann korrekt "Intercept".

Alternativ (O-Ton SAS) "...sollte grundsätzlich die Notwendigkeit bzw. der Bedarf einer deutschen SAS-Installation geprüft werden.". Im Zweifelsfall fährt man mit der englischen Installation also anscheinend besser...

Dem schließe ich mich an, aber ...

... wir müssen trotzdem mit dem real existierenden System leben, daher der Makro.

Idee: Abfrage der eingestellten Sprache im System

Wenn man die eingestellte Sprache Abfragen könnte, wäre ein modifikation über Macro noch flexibler.

Geht das?

Workaround

Ich habe auch keine Möglichkeit gefunden, dieses sprachabhängige Verhalten zu ändern. Wenn es notwendig ist, dass das Programm in beiden Sprachversionen läuft, kann das folgende Makro den richtigen Variablennamen heraussuchen:

/* gib den Namen derjenigen von den zwei Variablen zurück,
   die in der Datei gefundenen wurde */

%MACRO
intVar(data,var1,var2);
%LOCAL
dsid i var;
%LET
dsid=%sysfunc(open(&data,i));
%IF
&dsid=0 %THEN %RETURN;
%DO
i=1 %TO %sysfunc(attrn(&dsid,nvars));
   
%IF "%upcase(%sysfunc(varname(&dsid,&i)))" = %upcase("&var1") OR
        
"%upcase(%sysfunc(varname(&dsid,&i)))" = %upcase("&var2") %THEN %DO;
      
%sysfunc(varname(&dsid,&i))
      
%LET dsid=%sysfunc(close(&dsid));
      
%RETURN;
   
%END;
%END;
%LET dsid=%sysfunc(close(&dsid));
%MEND intVar;

/* Regression ausführen */
PROC
REG DATA=sashelp.prdsale OUTEST=MeineAusgabeDatei;
   
MODEL actual = predict;
RUN
; QUIT;

/* Greife auf die Variable zu, z.B. in PROC SQL */
PROC
SQL NOPRINT;
   
SELECT %intVar(MeineAusgabeDatei, Konstante, Intercept) INTO :intercept
   
FROM MeineAusgabeDatei;
QUIT
;
%PUT
intercept=&intercept;

Danke

Vielen Dank! Mit Workaround ist es zwar etwas umständlicher, aber immerhin sollte dann alles korrekt laufen.

Trotzdem würde mich natürlich interessieren, ob dieses Verhalten bei weiteren Prozeduren bzw. weiteren Sprachen auftritt. Weiß jemand aus der Redscope-Community mehr?

(Von der SAS-Hotline habe ich bezüglich dieses Problems bisher noch immer keine über "Wir recherchieren in unseren Datenbanken" hinaus gehende Antwort erhalten...)