使用来自libnames的excel表,其中包含逗号或特殊字符

时间:2016-02-22 16:46:55

标签: sas sas-macro

我有以下代码:

%macro area (ds);
data &ds (keep = areaname NSA_Tot SA_Tot);
set ms_File."&ds$"n (firsbobs = 2);
rename F2 = areaname not_seasonally_adjusted = NSA_tot seasonally_adjusted = SA_Tot;
label F2 = ' ' not_seasonally_adjusted = ' ' seasonally_adjusted = ' ';
run;
%mend area;
%area (%str(Coeur d'Alene, ID));

代码无效,因为我的数据集有一个逗号和撇号作为数据集名称的一部分。因此宏不起作用。我怎样才能解决这个问题?

基本上,使用上面的代码,我希望数据和集合解析为以下代码:

data Coeur d'Alene, ID;
set ms_File."Coeur d'Alene, ID$"n (firstobs =2);
....

1 个答案:

答案 0 :(得分:3)

要使用这些类型的名称,您需要设置options validmemname=extend;。这通常是默认关闭。

这有效:

options validmemname=extend;

data "Coeur d'Alene, ID"n;
  x=1;
run;

data test;
  set "Coeur d'Alene, ID"n;
run;

如果您设置了options validmemname=compat;,那么您的Excel libname引擎应该将名称转换为有效的SAS名称,通常是使用下划线替换无效字符,这样可能会有效:

options validmemname=extend;

data test;
  set msfile.Coeur_d_Alene__ID;
run;

您可以针对文件的libname运行proc datasets进行验证,或者只是在资源管理器中浏览它。