我想使用SAS宏语言创建一系列表,但我尝试通过的字符串中包含空格。关于添加什么以使它们成为有效表名的任何想法?
%macro has_spaces(string);
proc sql;
create table &string. as
select
*
from my_table
;
quit;
%mend;
%has_spaces(has 2 spaces);
感谢。
答案 0 :(得分:3)
另一种选择是翻译:
%macro has_spaces(string);
proc sql;
create table %sysfunc(translate(&string.,_,%str( ))) as
select *
from my_table
;
quit;
%mend;
答案 1 :(得分:2)
您可以执行类似这样的操作,因为这将捕获几乎任何对SAS表名无效的内容并将其替换为下划线。在根据包含各种奇怪符号和空格等的客户名称创建文件名时,我们使用类似的方法......:
%macro clean_tablename(iField=);
%local clean_variable;
%let clean_variable = %sysfunc(compress(&iField,,kns));
%let clean_variable = %sysfunc(compbl(&clean_variable));
%let clean_variable = %sysfunc(translate(&clean_variable,'_',' '));
&clean_variable
%mend;
测试案例1:
%let x = "kjJDHF f'ke''''j d (kdj-328) *#& J#ld!!!";
%put %clean_variable(iField=&x);
结果:
kjJDHF_fkej_d_kdj328_Jld
您的测试用例:
%macro has_spaces(string);
proc sql;
create table %clean_variable(iField=&string) as
select *
from sashelp.class
;
quit;
%mend;
%has_spaces(has 2 spaces);
结果:
NOTE: Table WORK.HAS_2_SPACES created, with 19 rows and 5 columns.
请注意,您可以在SAS中为表格命名。 IE浏览器。它必须以下划线或字符开头,且长度不得超过32个字符。如果需要,您可以添加其他逻辑...
答案 2 :(得分:1)
压缩空格 - 一种方法是在compress()
中使用datastep %SYSFUNC
函数,例如
%macro has_spaces(string); proc sql; create table %SYSFUNC(compress(&string)) as select * from my_table ; quit; %mend; %has_spaces(has 2 spaces);
答案 3 :(得分:0)
只需将表格名称放在引号后面跟一个' n'例如,如果您的表名是"表1" 然后将其作为参数"表1" n。
传递