【问题标题】:How do I import a census table into SAS when the variable name has special characters in it?当变量名称中包含特殊字符时,如何将人口普查表导入 SAS?
【发布时间】:2017-02-08 19:40:37
【问题描述】:

我正在使用 SAS Enterprise Guide,将美国社区调查表从人口普查导入脚本以使用它们。这是我要导入 SAS Enterprise Guide 的原始人口普查 csv 示例:

在我的数据步骤中,当我使用命令时

County=Geo.display-label;

我收到此错误:

在基础 SAS 中,我使用的是

County=Geo_display_label;

虽然这在基本 SAS 中有效,但当我在 Enterprise Guide 中尝试时,我收到了以下错误:

有什么方法可以让原始数据的变量名称 Geo.display-label 正确读入 SAS Enterprise Guide?​​p>

【问题讨论】:

  • 在您选择的 IMPORT 方法生成的数据集上运行 PROC CONTENTS。然后使用分配的名称。如果名称不符合正常的 SAS 命名约定,那么您将需要使用像 'Geo.display-label'n 这样的名称文字。将名称文字用于不需要它的名称(例如 'name'n)不会有任何损害。

标签: sas enterprise-guide


【解决方案1】:

要查看 VALIDVARNAME 选项对当列标题不是有效 SAS 名称时 PROC IMPORT 生成的名称的影响,让我们制作一个小测试 CSV 文件。

filename csv temp ;

data _null_;
 file csv ;
 put 'GEO.id,GEO.id2,GEO.display-label';
 put 'id1,id2,geography';
run;

如果我们在 VALIDVARNAME 选项设置为 ANY 时运行 PROC IMPORT 将其转换为 SAS 数据集,那么它将完全使用列标题,包括句点和连字符等非法字符。要使用这些非法字符引用变量,我们需要使用名称文字。

options validvarname=any;
proc import datafile=csv replace out=test1 dbms=dlm;
  delimiter=',';
run;
proc contents data=test1; run;
proc freq data=test1;
  tables 'GEO.display-label'n ;
run;

但如果我们将选项设置为 V7,那么它会将非法字符转换为下划线。

options validvarname=v7;
proc import datafile=csv replace out=test2 dbms=dlm;
  delimiter=',';
run;

proc contents data=test2; run;
proc freq data=test2;
  tables geo_display_label ;
run;

【讨论】:

  • 所以,它似乎奏效了,但我仍然收到“错误:导入不成功。有关详细信息,请参阅 SAS 日志。”但是结果选项卡显示了我的 proc 内容、数据步骤、proc 打印并且结果看起来正确。为什么它仍然给我一个错误?顺便说一句,感谢您迄今为止的帮助。我觉得我已经完成了 95% 的工作,但这是一个大型工作项目,所以我不想出错。
  • 您是在 EG 中使用导入任务还是纯代码任务?如果 SAS 服务器直接查看文件而无需让 EG 上传文件,则只需使用 SAS 代码步骤。
【解决方案2】:
County = 'geo.display-label'n;

如果您设置 OPTIONS VALIDVARNAME=V7;在 EG 中,您将获得与批处理 sas 相同的名称。

【讨论】:

  • 它不起作用,我收到“错误:名称 GEO.display-label 不是有效的 SAS 名称。”此代码在数据步骤中。在数据步骤之前,我有一个 proc 导入语句,我将在其中引入 csv。在定义 County 变量之前,我是否将选项 validvarname=V7 放在数据步骤中?我就是这么做的。
  • 您需要在 proc 导入之前更改 validvarname 选项,以更改 proc import 创建变量名称的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-17
  • 2021-12-08
  • 1970-01-01
  • 2020-12-31
  • 2014-08-30
相关资源
最近更新 更多