Import SAS proc导入中的变量格式

Import SAS proc导入中的变量格式,import,format,sas,Import,Format,Sas,在将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=

在将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;
所发生的是“条形码”列已经超过12。因此,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中的值生成缺失。

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


查看链接了解更多信息:

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


查看链接了解更多信息:

您可以将其转换为csv(或xls?)文件,并且:

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

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


  • 您可以转换为csv(或xls?)文件,并且:

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

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


  • 嗨,本迪,谢谢你的回答。我已经尝试过了,但是通过将选项更改为
    MIXED=YES
    唯一的变化是我在日志文件中得到了一个额外的注释:
    注释:数据源以只读模式连接。
    。因此,我仍然得到缺少的值。按照@DWal在回答中的建议,添加
    guessingrows=
    。。您可以指定它应该检查多少条初始记录中的非数字字符。Shi Bendy,感谢您的回答。我已经尝试过了,但是通过将选项更改为
    MIXED=YES
    唯一的变化是我在日志文件中得到了一个额外的注释:
    注释:数据源以只读模式连接。
    。因此,我仍然得到缺少的值。按照@DWal在回答中的建议,添加
    guessingrows=
    。。您可以指定它应该检查多少条初始记录中的非数字字符。感谢您的添加。我试过你的建议,但我遇到了一个错误:
    gussingrows=10000;------------180错误180-322:语句无效或使用顺序不正确。
    通过在线搜索,发现
    gussingrows=
    选项与.xlsx文件不兼容,由于我无法更改要导入的文件的类型,我认为这不再是一个选项。@Noob_Strider您应该做DWal建议的第二件事,并获取它创建的代码,然后修改它以满足您的需要。老实说,我不太理解第二种解决方案。你能详细解释一下吗?运行初始
    proc import
    时,日志会生成以下内容:
    proc import OUT=WORK.test DATAFILE=“D:\Barcode.xlsx”DBMS=excel REPLACE;RANGE=“Sheet1$”;GETNAMES=YES;混合=是;SCANTEXT=是;USEDATE=是;扫描时间=是;跑注意:已成功创建WORK.test数据集。注意:使用的过程导入(总处理时间):实时1.19秒cpu时间1.01秒
    。我如何修改它?很抱歉。我猜SAS没有为xlsx文件放入生成的代码。我不经常导入Excel文件。您好,谢谢您的添加。我试过你的建议,但我遇到了一个错误:
    gussingrows=10000;------------180错误180-322:语句无效或使用顺序不正确。
    通过在线搜索,发现
    gussingrows=
    选项与.xlsx文件不兼容,由于我无法更改要导入的文件的类型,我认为这不再是一个选项。@Noob_Strider您应该做DWal建议的第二件事,并获取它创建的代码,然后修改它以满足您的需要。老实说,我不太理解第二种解决方案。你能详细解释一下吗?运行初始
    proc import
    时,日志会生成以下内容:
    proc import OUT=WORK.test DATAFILE=“D:\Barcode.xlsx”DBMS=excel REPLACE;RANGE=“Sheet1$”;GETNAMES=YES;混合=是;SCANTEXT=是;USEDATE=是;扫描时间=是;跑注意:已成功创建WORK.test数据集。注意:使用的过程导入(总处理时间):实时1.19秒cpu时间1.01秒
    。我如何修改它?很抱歉。我猜SAS没有为xlsx文件放入生成的代码。我不经常导入Excel文件。