News Artikel Foren Projekte Links Über Redscope Join List Random Previous Next Startseite Foren Allgemeine Fragen zu SAS Wie überprüfen, ob eine Datei existiert? 9 February, 2010-13:51 SAS-Fidi Hallo, ich möchte eine Macro-Schleife nur dann ausführen lassen, wenn eine bestimmte Datei existiert. Wie mache ich das? Foren: Allgemeine Fragen zu SAS Der Code, der Probleme macht! So, hab hier den fraglichen Programm-Ausschnitt: 9 February, 2010-14:16 SAS-Fidi %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; %if %sysfunc(fileref(kkwtest))>0 %then %do; data kkwtest; set kkwtest(keep=nvalue1); usw. Fehlermeldung: ERROR: File WORK.KKWTEST.DATA does not exist. Fast richtig! 9 February, 2010-14:30 SAS-Fidi 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; %if %sysfunc(exist(kkwtest))>0 %then %do; data kkwtest; set kkwtest(keep=nvalue1); 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): 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) NOPRINT Hallo, 9 February, 2010-15:09 Wolfgang Hornung 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, 10 February, 2010-09:37 SAS-Fidi 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. Noprint ist nun raus 10 February, 2010-10:26 SAS-Fidi 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). ODS LISTING CLOSE Hallo Elfride, hast Du schon mal probiert, vor das PROC NPAR1WAY ein 10 February, 2010-11:21 Tobias Hentschel
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. 10 February, 2010-13:42 SAS-Fidi Seltsamerweise werden aber im Resultfenster dann trotzdem die ganzen Npar1way-Statistiken angezeigt, obwohl sie sich nicht im Output befinden. Diese Ausgaben im 23 February, 2010-14:24 SAS-Fidi 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.) Unterdrücken von Output Hallo Elfriede, 12 March, 2010-11:41 Holger Bargen Den Output im Outputfenster kann man mit folgendem Befehl unterdrücken: proc Printto print=null; Angeschaltet wird der Output dann wieder mit: proc Printto; 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 Ich hatte gleiches Problem. 18 August, 2014-14:50 Chris86 Ich hatte gleiches Problem. Habe mir den gewünschten Output per ODS OUTPUT weggeschrieben und trotz ODS SELECT none wurde im Outputfenster die PROC's erwähnt ohne dass man jedoch die Ergebnisse sehen kann. Dies kostete mich viel Rechenzeit, aber mit der Option "ODS NORESULTS" wird dies wunderbar ignoriert. Ungefähr so vielleicht. Hi Elfriede, 9 February, 2010-14:18 wusaa 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 9 February, 2010-14:21 SAS-Fidi 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...) Nein 9 February, 2010-14:30 wusaa 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! 9 February, 2010-14:33 SAS-Fidi Ganz vielen Dank!