SAS PROC导入未按命令创建数据集



情况:我正在用PROC导入导入XLSX文件,并希望将数据发送到新的Netezza数据库表。

我的问题:SAS似乎运行良好,但是日志显示了我不使用的libref创建了完全不同的表名称(清除了此libref(。P>

LIBNAME abc sasionza server=server database=db port=123 user=user pass=pass;
PROC IMPORT
    OUT = abc.DesiredTableName
    DATAFILE= "my/excelfile/file.xlsx"
    DBMS=xlsx
    REPLACE;
    SHEET="Sheet1";
    GETNAMES=YES;
RUN;

这个"运行"就可以了,或者看起来如此。我检查日志,然后看到:

注意:导入数据集有11个观测值和7个变量。
注意: XYZ .AtableCreatedDaysagoinanAtherProgram 数据集成功地创建了。注意:使用的过程导入(总过程时间(: 实时0.55秒 CPU时间0.02秒

我想,嗯,这很奇怪。libref xyz 实际上已清除,因此我不可能使用它, AtableCreateDdaysogagoinanAtherAtherProgram 是我所使用的完全不同的SAS E-Guide程序中使用的tablename。/p>

听起来像是内存或缓存问题。因此,我关闭了SAS Eguide的所有实例,并启动了新的实例。我创建了一个仅具有所需行的新程序(上面列出的代码(。

它运行,结果我会得到以下日志:

注意:导入数据集有11个观测值和7个变量。
注意:工作 ._ prodsavail 数据集成功创建了。
注意:使用的过程导入(总过程时间(: 实时0.55秒 CPU时间0.02秒

我会注意到,这是我实际尝试使用PROC导入将某些内容直接发送到Netezza表的第一次。到目前为止,我一直将文件导入工作并与它们合作,然后将其插入数据库中的表格。我认为这也许这是我可能不知道的SAS限制,但是SAS Proc Import(https://v8doc.sas.com/sashtml/proc/proc/z0308090.htm(表示您可以指定两个级别在Out语句中命名,所以我觉得这应该起作用。如果它无法工作,那么我觉得SAS应该出错,而不是随机创建我在代码中都不执行的表名。

摘要(TL; dr(:您可以使用libref直接导入Netezza数据库表吗?如果您不能,为什么我的代码执行和制作文本甚至与我的工作无关?

谢谢,大家!

解决方案被导入的XLSX文件中的列中有一个列名称中的空间... 简单地删除列名中的空间并将更改保存到XLSX文件中允许上述PROC导入代码完美执行的XLSX文件,并将所需的结果导入到命名的Netezza表中。

注意:解决了我的问题,但是它并未解释SAS日志显示执行的文本,实际上并未执行代码中。

听起来您应该报告问题,而不会向SAS收到工作错误消息。

要确保您的SAS/NETEZZA表没有可变名称,其空间中的空格在运行程序之前会更改vall varname选项的设置。这样,proc导入将您的列中的列标题转换为有效的变量名称。

options validvarname=v7;
libname out ...... ;
proc import out=out.table replace ...

相关内容

  • 没有找到相关文章

最新更新