Questions: 如何在使用PROC IMPORT时定义从.xlsx文件导入的变量的变量类型?
My work
我使用的是SAS v9.4 . 据我所知,它是vanilla SAS . 我没有SAS / ACCESS等
我的数据如下:
ID1 ID2 MONTH YEAR QTR VAR1 VAR2
ABC_1234 1 1 2010 1 869 3988
ABC_1235 12 2 2010 1 639 3144
ABC_1236 13 3 2010 2 698 3714
ABC_1237 45 4 2010 2 630 3213
我正在运行的程序是:
proc import out=rawdata
datafile = "c:\rawdata.xlsx"
dbms = xlsx replace;
format ID1 $9. ;
format ID2 $3. ;
format MONTH best2. ;
format YEAR best4. ;
format QTR best1. ;
format VAR1 best3. ;
format VAR2 best4. ;
run;
当我运行此步骤时,我得到以下日志输出:
错误:您正在尝试在数据集WORK.RAWDATA中使用字符格式$和数字变量ID2 .
这似乎告诉我的是SAS自动分配变量类型 . 我希望能够手动控制它 . 我找不到解释如何执行此操作的文档 . INFORMAT,LENGTH和INPUT语句似乎不适用于PROC IMPORT .
我正在使用PROC IMPORT,因为它总体上使用.xlsx文件取得了最大的成功 . 我能想到的两个可能的解决方案是1)将.xlsx转换为.csv并在DATA步骤中使用INFILE,2)将数据作为数字输入并在后面的步骤中将其转换为字符 . 我不喜欢第一个解决方案,因为它需要我手动操作数据,这是潜在的错误来源(例如删除前导零) . 我不喜欢第二种,因为它可能无意中引入了错误(再次,例如使用前导零)并引入了无关的工作 .
2 回答
您可以尝试在Excel中将列类型设置为“文本”,以查看SAS是否可以从中确定它 . 值得一试 .
如果这不起作用,除非您使用PC文件服务器,或者在同一SAS服务器上安装相同位的Excel以便直接访问该文件,您将需要使用单独的数据步骤来转换列 .
如果您有SAS / Access to Excel,则可以使用DBDSOPTS data set option直接控制这些变量 . 例如:
发生问题的原因是
proc import
中的xlsx
引擎是SAS内部的,并且与Excel
引擎分开 .Excel
引擎使用Microsoft Jet或Ace,而xlsx
引擎使用的专有系统没有微软那么多的控制权 . 为什么会这样,我不知道 .当
proc import
运行时,SAS将尝试猜测它应该是什么格式(使用guessingrows
选项可以控制xls文件) . 如果它检测到所有数字,它将采用数字变量 . 遗憾的是,如果未安装SAS / ACCESS到Excel或PC文件服务器,则无法直接控制变量类型 .在Excel中定义类型 .
如果您想稍后转换它,请使用数据步骤转换列 .