2017-02-01 1 views
0

Ich erstelle eine Textdatei mit SAS und ich verwende eine Makrovariable mit einem Datum im Namen meiner Textdatei, um es von anderen ähnlichen Dateien zu unterscheiden.SAS Hinzufügen von unerwünschten Leerzeichen zu Dateinamen, wenn Makrovariablen enthalten sind

Das Problem ich erlebe:

SAS ist das Hinzufügen von zwei unerwünschten Räume in der Mitte des Dateinamens. Die unerwünschten Leerzeichen werden direkt vor dem Text platziert, der von meiner Makrovariablen generiert wird

Ich bin sicher, dass dies alles damit zu tun hat, dass meine Makrovariable verwendet wird, aber die Variable selbst keine Leerzeichen enthält. Unten ist mein Code:

NOTE: The file OUT is: 
    Filename=/location/here/text_text_abc_ 201702010855.txt 

Wenn es hilft, ich SAS E-Guide 7.1 bin mit:

proc format; 
    picture dateFormat 
    other = '%Y%0m%0d%0H%0M' (datatype=datetime); 
run; 

data _null_; 
    dateTime=datetime(); 
    call symput('dateTime', put(dateTime,dateFormat.)); 
run; 

%LET FILE = text_text_abc_&dateTime..txt; 

filename out "/location/here/&FILE" termstr=crlf; 

data _null_; set flatfile; 
    /*file content is created in here*/ 
run; 

Die Datei exportiert Name wird wie folgt aussehen.

Jede Hilfe wird geschätzt! Danke, alles!

Antwort

2

Sie müssen Ihrem Bildformat eine angemessene Standardlänge zuweisen. SAS wendet eine Standardstandardlänge von 14 an, aber Sie benötigen 12, z.

proc format; 
    picture dateFormat (default=12) 
    other = '%Y%0m%0d%0H%0M' (datatype=datetime); 
run; 
+0

Dies funktionierte perfekt. Danke für die schnelle Antwort! Ich kann es für weitere 4 Minuten nicht akzeptieren, je nach Stapelüberlauf :) –

2

Verwenden call symputx() anstelle von call symput(), dann SAS wird die vordere und hintere Zuschnitte aus dem Wert automatisch Streifens in der Makrovariable geschrieben. Sie sollten wirklich nur call symput() in den seltenen Fällen verwenden, in denen der Wert der Makrovariablen führende oder nachfolgende Leerzeichen enthalten soll.

Führen Sie dieses kleine Programm aus, um den Unterschied zu sehen.

data _null_; 
    str=' XX '; 
    call symput('var1',str); 
    call symputX('var2',str); 
run; 

%put |&var1|; 
%put |&var2|; 
Verwandte Themen