【问题标题】:Variables format in SAS proc importSAS proc 导入中的变量格式
【发布时间】:2015-06-02 11:00:12
【问题描述】:

在将excel文件导入SAS时,发现由于变量格式错误导致导入不正确。

尝试导入的表如下所示:

ID  Barcode
1   56798274
2   56890263
3   60998217
4   SKU89731
...

我使用的代码如下:

PROC IMPORT OUT= WORK.test
        DATAFILE= "D:\Barcode.xlsx" 
        DBMS=EXCEL REPLACE;
 RANGE="Sheet1$"; 
 GETNAMES=YES;
 MIXED=NO;
 SCANTEXT=YES;
 USEDATE=YES;
 SCANTIME=YES;
 RUN;

发生的情况是“条形码”列具有 best12。格式,因此 ID=4 的情况会得到一个缺失值 ('.'),因为它们最初既有字符又有数字。

由于无法在 proc 步骤中更改变量的格式,我如何才能正确导入文件,并且只能使用 SAS 编辑器

编辑:

另一个完成一半工作并且可能会提供一些灵感的选项是通过数据步骤导入来动态更改变量的格式:

libname excelxls Excel "D:\Barcode.xlsx";

data want;
set excelxls.'Sheet1$'n (DBSASTYPE=(Barcode='CHAR(255)'));
run;

使用上面的代码,我强制 SAS 以我想要的格式 (char) 导入变量,但仍然会为 ID=4 中的值生成缺失值。

【问题讨论】:

    标签: import format sas


    【解决方案1】:

    我认为你的问题是你有mixed=NO。将其更改为mixed=YES,SAS 将检查观察样本以查看变量中是否有任何非数字字符 - 如果找到,则将变量指定为字符。

    查看链接here了解更多信息:

    【讨论】:

    • 您好,Bendy,感谢您的回答。我已经尝试过了,但是通过将选项更改为MIXED=YES,唯一改变的是我在日志文件中得到了一个额外的注释:NOTE: Data source is connected in READ ONLY mode.。所以我仍然得到缺失值。
    • 添加guessingrows= @DWal 在他的回答中建议...您可以指定它应该检查多少初始记录以检查非数字字符
    【解决方案2】:

    您可以转换为 csv(或者可能是 xls?)文件,或者:

    1. 使用 guessingrows= 选项增加 SAS 用于确定类型的行数。

    2. 如果您想完全控制导入:复制proc import 放入日志的数据步骤代码并粘贴到您的程序中。现在您可以修改它以完全按照您的需要读取数据。

    【讨论】:

    • 嗨 DWal 感谢您的加入。我已经尝试过您的建议,但出现错误:guessingrows=10000; ------------ 180 ERROR 180-322: Statement is not valid or it is used out of proper order. 通过在线搜索发现guessingrows= 选项与 .xlsx 文件不兼容,并且由于我无法更改我想要的文件类型导入这不再是我认为的选项。
    • @Noob_Strider 您应该做 DWal 建议的第二件事,并获取它创建的代码,然后对其进行修改以满足您的需求。
    • 说实话,我不太了解第二种解决方案。你能解释得更彻底一点吗?运行初始 proc import 时,日志会生成以下内容:PROC IMPORT OUT= WORK.test DATAFILE= "D:\Barcode.xlsx" DBMS=excel REPLACE; RANGE="Sheet1$"; GETNAMES=YES; MIXED=YES; SCANTEXT=YES; USEDATE=YES; SCANTIME=YES; RUN; NOTE: WORK.test data set was successfully created. NOTE: PROCEDURE IMPORT used (Total process time): real time 1.19 seconds cpu time 1.01 seconds 。我该如何修改?
    • 很抱歉。我猜 SAS 没有为 xlsx 文件放置生成的代码。我不经常导入 Excel 文件。
    猜你喜欢
    • 2020-07-19
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多