【问题标题】:Proc Import. Importing Character values as "Blank" from excel files过程导入。从 excel 文件中将字符值导入为“空白”
【发布时间】:2013-04-08 20:09:41
【问题描述】:

我正在尝试使用以下代码导入多个 Excel 文件。每个 excel 文件中都有一列同时具有数值和文本值,但 proc import 仅导入数值,并将文本值留空('.')。

谁能帮我解决这个问题?非常感谢。

%let subdir=S:\Temp\;  

filename dir "&subdir.*.xls";

data new;

length filename  fname $ 32767;

infile dir  eof=last filename=fname;

input ;

last: filename=fname; 

run; 

proc sort data=new nodupkey;

by filename;

run;

data null;

set new end=last;

call symputx(cats('filename',_n_),filename);

call symputx(cats('dsn',_n_),scan(scan(filename,7,'\'),1,'.'));

if last then call symputx('nobs',_n_);

run;

%put &nobs;

%macro import;

%do i=1 %to &nobs;


proc import datafile="&&filename&i" out=&&dsn&i 

dbms=excel replace;

sheet = "Sheet1";

getnames=yes;

mixed=yes;

run;


%end;

%mend import;

%import

【问题讨论】:

    标签: import sas


    【解决方案1】:

    在导入的 Excel 工作簿中控制数据类型的最佳方法是使用带有 libname 的 DBSASTYPE 数据集选项。这在处理其他数据类型(如日期时间和时间值)时特别有用。

    例如,假设受影响的列名为 MY_VAR 并且应始终被读取为最大长度为 30 的字符。我们还假设您有一个名为 START_TIME 的电子表格列 包含 Excel 编码的日期和时间戳。您的宏可能会这样修改:

    libname x "&&filename&i";
    data &&dsn&i;
       set x.'Sheet1$'n(dbsastype=(MY_VAR=char30 START_TIME=datetime));
    run;
    libname x clear;
    

    只要您知道导致问题的 Excel 列的名称,这应该可以正常工作。

    【讨论】:

    • 感谢您的回复。我仍然在 SAS 中将字符值作为空格。
    【解决方案2】:

    Mixed=Yes 应该可以为您解决问题,但如果不是,那么有一些解决方案。

    首先,您可能需要检查您的扫描值。您可以在此处查看一个可能的位置: http://support.sas.com/kb/35/563.html

    HKEY_LOCAL_MACHINE ► 软件 ► Microsoft ► Office ► 12.0 ► 访问连接引擎 ► 引擎

    如果您有旧版本的 Office(2007 年之前),它被称为“JET 引擎”并且位于稍微不同的位置(您可以在 google 上找到它)。您的“12.0”可能会有所不同,具体取决于您安装的内容(12.0 是 Office 2007)。

    其次,您可以强制列为特定类型。 DBSASTYPE 选项是你需要去的地方;例如见http://www2.sas.com/proceedings/sugi31/020-31.pdf(大约在文档中间,搜索DBSASTYPE)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-03
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-05
      相关资源
      最近更新 更多