Ich versuche, das Makro unten zu ändern, um einen Makroparameter als das 'location' Argument für einen Befehl dir zu akzeptieren. Ich kann jedoch nicht erreichen, dass es aufgrund des Problems mit verschachtelten Anführungszeichen korrekt aufgelöst wird. Die Verwendung von% str (% ') funktioniert nicht, auch keine Quoting-Funktionen aus irgendeinem Grund.
Das Makro funktioniert einwandfrei, wenn der Dateipfad keine Leerzeichen hat (z. B. C: \ temp \ withnospace), da die mittleren Anführungszeichen nicht benötigt werden. Ich brauche dieses Makro jedoch für Dateipfade mit Leerzeichen (z. B. "C: \ temp \ with space \").
Bitte helfen Sie!
%Vor%Nehmen Sie die folgenden Änderungen vor und Ihr Code wird funktionieren.
%Vor% (1) Beende die %macro
-Anweisung mit einem Semikolon;
(2) Umgeben Sie die Auflösung der Makrovariablen mit doppelten Anführungszeichen und %unquote
;
(3) Geben Sie den Dateigriff frei, indem Sie ihn löschen. und
(4) Zitieren Sie nicht Ihren Eingabeparameter. Makro Zitat, wenn nötig.
Basierend auf dem letzten Beispiel auf dieser Seite , Versuchen Sie anstelle der Dateinamenanweisung
%Vor%und rufen Sie das Makro ohne Anführungszeichen auf:
%Vor%Ich habe auch versucht, Makros zu zitieren, aber ich konnte es nicht zum Laufen bringen.
es funktioniert für mich, wenn ich das Original-Makro auf diese Weise aufrufen
%Vor% natürlich musste ich das Semikolon am Ende der %macro
-Anweisung hinzufügen.
Wenn Ihr Verzeichnis ein Komma enthält, passieren schlimme Dinge. zu beheben, verwenden Sie das Makro %str()
Hier ist eine reine Makrocodeversion. Sie können auch angeben, dass Sie nur über Dateien (und nicht über Ordner) informiert werden möchten und einen Basisfilter angeben können. Es gibt die Liste der Dateien in einem begrenzten Format zurück, aber Sie können diese einfach mit SQL-Einfügung in ein Dataset einfügen, wenn Sie möchten (Beispiel enthalten, aber nicht getestet - kein SAS-Zugriff atm). Es kann von überall aufgerufen werden - innerhalb eines anderen Makros, eines Datasets, einer SQL-Anweisung ... wo auch immer. Fügen Sie einfach diese beiden Makros zu Ihrer Makro-Autocall-Bibliothek hinzu und Sie haben recht damit.
Es gibt 2 Makros unten. Das Makro% isdir wird vom Makro% file_list benötigt. Die Makros sind ein bisschen größer und komplexer als die oben genannten, aber sie sind viel flexibler. Außerdem bieten sie eine Fehlerprüfung.
%Vor%Hier ist einer, der die Reihenfolge des Zitierens und des Nichtquittierens entschlüsselt:
%Vor% wobei die Makrovariable basedir Leerzeichen enthalten kann und auch die Dateinamen.
Diese Kombination von
%unquote
und %str(%')
ist ein häufig vorkommendes Makro-Idiom.
"Was ist, wenn ich ein einzelnes Zitat in meinem Verzeichnis habe?"
Die Handhabung dieser Situation erfordert eine Makro-Quotierungsfunktion, z. B. %bquote();
.
Fahren Sie mit dem obigen Beispiel fort:
sollte es tun.
Um unendliche Wiederholungen dieser Art von Frage zu vermeiden, schauen Sie sich an Ian Whitlocks Arbeit A Serious Look on Macro Quoting, die hier zur Verfügung steht;
Es gibt (viele) andere, aber das ist das am meisten zitierte. Eine kleine Anmerkung: irgendetwas von Ian Whitlock ist wahrscheinlich lohnenswert. Er schreibt klar und sein Verständnis von SAS-Themen ist großartig.