Wie überprüfen, ob eine Datei existiert?

Hallo,

ich möchte eine Macro-Schleife nur dann ausführen lassen, wenn eine bestimmte Datei existiert. Wie mache ich das?

VG SAS-Fidi

Ungefähr so vielleicht.

Hi Elfriede,

hatte deine Frage falsch verstanden...
Sorry.

Also du könntest dass so machen...

%if %sysfunc(exist(work.x2))=0 %then %do;

wenn ich es recht in Erinnerung habe prüft fileexist nach einer externen Datei.

Grüße
Niko

Das fileexist falsch sein

Das fileexist falsch sein muß, war mir gerade noch selbst aufgefallen, hatte es deshalb unten noch geändert. Sorry, wenn das jetzt für Verwirrung sorgt.

Also exist gibt die 0 aus, wenn das File existiert, richtig?

Fileref paßt dann nicht, oder? (gerade etwas verwirrt bin......)

VG SAS-Fidi

Nein

Nein. exist liefert die 0 wenn die Datei nicht exisitert und eine 1 wenn die Datei existiert.

schon klar

Jupp, habs auch gemerkt, guck mal unten!

Ganz vielen Dank!

VG SAS-Fidi

Der Code, der Probleme macht!

So, hab hier den fraglichen Programm-Ausschnitt:

%macro kkwselect(datei,var1,var2);
%if &datei= %then %let datei=_last_;
proc npar1way data=&datei wilcoxon noprint;
title1 "Wilcoxon-Test für &var2. klass. nach &var1";
class &var1;
var &var2;
ods output KruskalWallisTest = kkwtest
WilcoxonScores = wiltest;
run;

%if %sysfunc(fileref(kkwtest))>0 %then %do;
data kkwtest;
set kkwtest(keep=nvalue1);
run;

usw.

Fehlermeldung:
ERROR: File WORK.KKWTEST.DATA does not exist.

VG SAS-Fidi

Fast richtig!

Sodele, jetzt paßt es fast. Allerdings sind da noch unschöne Warnings, die immer noch weg müssen!

Das Programm, wie es jetzt ist:

%macro kkwselect(datei,var1,var2);
%if &datei= %then %let datei=_last_;
proc npar1way data=&datei wilcoxon noprint;
title1 "Wilcoxon-Test für &var2. klass. nach &var1";
class &var1;
var &var2;
ods output KruskalWallisTest = kkwtest
WilcoxonScores = wiltest;
run;
%if %sysfunc(exist(kkwtest))>0 %then %do;
data kkwtest;
set kkwtest(keep=nvalue1);
run;

usw.

Hier mal das Log:

MLOGIC(KKWSELECT): %IF condition %sysfunc(exist(kkwtest))>0 is FALSE
MLOGIC(KKWSELECT): Ending execution.
MPRINT(VISUSQUART): ;
MLOGIC(VISUSQUART): %DO loop index variable I is now 12; loop will
iterate again.
MLOGIC(KKWSELECT): Beginning execution.
MLOGIC(KKWSELECT): Parameter DATEI has value quartile
MLOGIC(KKWSELECT): Parameter VAR1 has value quart
MLOGIC(KKWSELECT): Parameter VAR2 has value logmar12
MLOGIC(KKWSELECT): %IF condition &datei= is FALSE
MPRINT(KKWSELECT): proc npar1way data=quartile wilcoxon noprint;
MPRINT(KKWSELECT): title1 "Wilcoxon-Test für logmar12 klass. nach
quart";
MPRINT(KKWSELECT): class quart;
MPRINT(KKWSELECT): var logmar12;
MPRINT(KKWSELECT): ods output KruskalWallisTest = kkwtest
WilcoxonScores = wiltest;
MPRINT(KKWSELECT): run;
NOTE: There are no valid requests for printed output or an output data
set, so processing will terminate.
NOTE: PROCEDURE NPAR1WAY used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds

WARNING: Output 'WilcoxonScores' was not created. Make sure that the
output object name, label, or path is spelled correctly.
Also, verify that the appropriate procedure options are used
to produce the requested output object. For example, verify
that the NOPRINT option is not used.
WARNING: Output 'KruskalWallisTest' was not created. Make sure that
the output object name, label, or path is spelled correctly.
Also, verify that the appropriate procedure options are used
to produce the requested output object. For example, verify
that the NOPRINT option is not used.

MLOGIC(KKWSELECT): %IF condition %sysfunc(exist(kkwtest))>0 is FALSE
MLOGIC(KKWSELECT): Ending execution.

(visusquart ist dabei das Macro, das dieses aufruft und deshalb im Log erschient)

VG SAS-Fidi

NOPRINT

Hallo,

im Warning steht

" ...For example, verify that the NOPRINT option is not used. ".

Aber genau diese Option benutzt Du im Code.

proc npar1way data=&datei wilcoxon noprint;

Ich kenne mit mich mit dieser Prozedur zwar nicht aus, aber das könnte ein Grund sein.

Viele Grüße
Wolfgang

Ne, das ist es wohl nicht,

Ne, das ist es wohl nicht, denn das Macro läuft einwandfrei, wenn die Dateien kkwtest und wiltest von der Prozedur angelegt werden. Nur wenn das nicht passiert, wird dieses Warning erzeugt.

Das Noprint muß stehen bleiben, da an dieser Stelle kein Output erzeugt werden soll. Stattdsessen wird dann später eine Excel-Datei mit den fraglichen Werten erzeugt. Alles andere würde die Enduser nur verwirren.

VG Elfriede

Noprint ist nun raus

Habs gerade ausprobiert. Wenn ich das Noprint rauslösche, dann gibts die Warning nicht mehr. Dafür erhalte ich dann aber eine Menge nicht benötigte Outputs (>100 nicht benötigter npar1way-Statistiken).

VG Elfriede

ODS LISTING CLOSE

Hallo Elfride,
hast Du schon mal probiert, vor das PROC NPAR1WAY ein
ODS LISTING CLOSE;
zu stellen? Dann noch
ODS LISTING;
nach dem RUN; der Procedur, dann müsste der ungewünschte Output doch auch unterdrückt werden, oder?

VG Tobias

Danke, das funktioniert.

Danke, das funktioniert.

Seltsamerweise werden aber im Resultfenster dann trotzdem die ganzen Npar1way-Statistiken angezeigt, obwohl sie sich nicht im Output befinden.

VG Elfriede

Diese Ausgaben im

Diese Ausgaben im Resultfenster verwirren die anderen hier sehr, habe bisher aber keine Möglichkeit gefunden, sie zu unterdrücken. Weiß jemand Rat?

(Klickt man auf diese Links im Resultfenster, werden die Dateien mit den Ergebnissen angezeigt.)

VG Elfriede

Unterdrücken von Output

Hallo Elfriede,

Den Output im Outputfenster kann man mit folgendem Befehl unterdrücken:

proc Printto print=null;
run;

Angeschaltet wird der Output dann wieder mit:

proc Printto;
run;

Wenn Du also vor Deiner npar1way den Output unterdrückst und es danach wieder anschaltest, dann produziert dein npar1way keinerlei Output ins Output Fenster.

Gewünschte Ergebnisse müßte man dann anschliessend durch Ausdrucken der ODS Ergebnisfiles im Output verfügbar machen.

Ich persönlich verwende den Output aber kaum noch. Ich erzeuge einen ODS RTF File, in dem wirklich alles drin ist und einen ODS PDF File, in dem ich nur die für die Auswertung essentiellen Ergebnisse drin stehen. Da hab ich dann auch gleich alles in der von mir gewünschten Form grafisch aufbereitet.

Viele Grüße
Holger