Wie überprüfen, ob eine Datei existiert?
Verfasst von SAS-Fidi am 9 Februar, 2010 - 13:51
Hallo,
ich möchte eine Macro-Schleife nur dann ausführen lassen, wenn eine bestimmte Datei existiert. Wie mache ich das?
VG SAS-Fidi
»
- Anmelden oder Registrieren um Kommentare zu schreiben

Ungefähr so vielleicht.
Hi Elfriede,
hatte deine Frage falsch verstanden...
Sorry.
Also du könntest dass so machen...
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.
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