SAS 在包含宏变量时向文件名添加不需要的空格
SAS adding unwanted spaces to file names when macro variables are included
我正在用 SAS 创建一个文本文件,我在文本文件的名称中使用了一个带有日期的宏变量,以使其与其他类似文件区分开来。
我遇到的问题:
SAS 在文件名中间添加了两个不需要的空格。不需要的空格直接放在我的宏变量生成的文本之前
我确定这与我使用的宏变量有关,但就其本身而言,该变量不包含任何空格。下面是我的代码:
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;
导出的文件名将如下所示:
NOTE: The file OUT is:
Filename=/location/here/text_text_abc_ 201702010855.txt
如果有帮助,我正在使用 SAS E-Guide 7.1。
感谢任何帮助!谢谢大家!
您需要为您的图片格式指定一个合适的默认长度。 SAS 正在应用默认长度 14,但您需要 12,例如
proc format;
picture dateFormat (default=12)
other = '%Y%0m%0d%0H%0M' (datatype=datetime);
run;
使用call symputx()
而不是call symput()
,那么SAS会自动从写入宏变量的值中去除前导和尾随空白。在希望宏变量值具有前导或尾随空白的极少数情况下,您实际上应该只使用 call symput()
。
运行这个小程序可以看出区别。
data _null_;
str=' XX ';
call symput('var1',str);
call symputX('var2',str);
run;
%put |&var1|;
%put |&var2|;
我正在用 SAS 创建一个文本文件,我在文本文件的名称中使用了一个带有日期的宏变量,以使其与其他类似文件区分开来。
我遇到的问题:
SAS 在文件名中间添加了两个不需要的空格。不需要的空格直接放在我的宏变量生成的文本之前
我确定这与我使用的宏变量有关,但就其本身而言,该变量不包含任何空格。下面是我的代码:
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;
导出的文件名将如下所示:
NOTE: The file OUT is:
Filename=/location/here/text_text_abc_ 201702010855.txt
如果有帮助,我正在使用 SAS E-Guide 7.1。
感谢任何帮助!谢谢大家!
您需要为您的图片格式指定一个合适的默认长度。 SAS 正在应用默认长度 14,但您需要 12,例如
proc format;
picture dateFormat (default=12)
other = '%Y%0m%0d%0H%0M' (datatype=datetime);
run;
使用call symputx()
而不是call symput()
,那么SAS会自动从写入宏变量的值中去除前导和尾随空白。在希望宏变量值具有前导或尾随空白的极少数情况下,您实际上应该只使用 call symput()
。
运行这个小程序可以看出区别。
data _null_;
str=' XX ';
call symput('var1',str);
call symputX('var2',str);
run;
%put |&var1|;
%put |&var2|;