将带空格的字符串转换为有效的表名

时间:2014-07-23 14:25:34

标签: sas sas-macro

我想使用SAS宏语言创建一系列表,但我尝试通过的字符串中包含空格。关于添加什么以使它们成为有效表名的任何想法?

%macro has_spaces(string);

proc sql;
create table &string. as 
select

*

from my_table
;
quit;
%mend;

%has_spaces(has 2 spaces);

感谢。

4 个答案:

答案 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。

传递