【问题标题】:How to dynamically import external file in SAS如何在SAS中动态导入外部文件
【发布时间】:2015-07-02 22:46:19
【问题描述】:

假设您事先不知道需要导入的文件的路径,但是您在运行时创建的表中定义了路径。使用宏导入是不正确的,因为宏是在运行时之前生成的,因此宏值无法到达将在运行时创建的数据。

那么,如何在 SAS Base (SAS EG, SAS DI,...) 中导入一个只有在运行时才知道路径的外部文件?

【问题讨论】:

  • 我不明白你为什么说宏不是一个可行的选择。实际上,我也不太确定您所说的运行时是什么意思。你能详细说明一下吗?您还可以提供有关路径内容的更多详细信息吗?它只会包含一个文件吗?
  • @RobertPenr​​idge :宏工具的许多缺点之一是宏语句在实际程序执行之前被处理并静态添加到代码中。这意味着,在上述情况下,如果您需要导入外部文件,而您只有在程序执行后才知道哪个文件路径(通过对数据库的复杂查询,或通过 Web 服务等),宏处理器是无法获取此类数据,因为在生成此类信息之前正在运行宏处理器。我错了吗?
  • 是的,我认为您可能对宏环境如何与常规 SAS 代码交互有一些误解。我不能代表 DI studio,因为我没有使用过它,但我知道在基本 SAS 中,当您直到运行时才知道文件时,您绝对可以通过宏引用文件。

标签: sas enterprise-guide


【解决方案1】:

SAS 基地

data test;
  Path='/path/to/your/csv/file.csv';
run;

data _null_;
  set test;
  rc=filename("fid",Path);
run;

data csvData(drop=path);
  infile fid;
  input ...
run;

SAS 数据集成工作室

假设您已经创建了包含 csv 文件路径的 SAS 数据集。然后你需要:

  • 添加“用户编写代码”转换(在“数据->用户编写代码”下),
  • 将 SAS 数据集(包含 csv 文件的路径)连接到“用户编写的代码转换”。
  • 转到“用户编写代码”属性,选项卡“代码”(保持“代码生成模式:用户编写的正文”),并在代码正文的正上方写下以下文本 %rcSet(&syserr... (它是有时很难看到,但自动生成的代码有灰色背景,而您的代码有完整的白色背景):

    数据 null; 设置 &_INPUT.; rc=filename("fid",路径); 运行;

  • 现在创建一个新的“外部文件”,设置您想要的元数据(我假设您知道您期望的 csv 文件格式),然后

  • 在“外部文件”的属性下,选项卡“文件位置”下,在“文件名:”下,简单地写“fid”(不带引号),然后在同一选项卡上的“文件名引用”下,选择“不带引号围绕文件名”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多