SAS 将 Excel 数字列导入为文本

问题描述 投票:0回答:3

我有一个 Excel 文件,其中有一列格式为“常规”。它保存数值,但我希望将其作为文本导入。

当我使用时:

PROC IMPORT OUT= test DATAFILE= "C:\file"
            DBMS=xlsx REPLACE;
     GETNAMES=YES;
RUN;

有时以数字形式导入,有时以文本形式导入。我怎样才能始终将其导入为文本?我在 Windows 7 和 Excel 2010 上使用 sas 9.4。

即使这不起作用......它也不会改变数据类型:

PROC IMPORT OUT= test DATAFILE= "C:\data.xlsx"
            DBMS=excel  REPLACE;
            DBDSOPTS= "DBTYPE=(Employee_No='CHAR(3)')";
     GETNAMES=YES;
RUN;
sas
3个回答
0
投票

这是使用 PCFILES 方法而不是 XLSX 来完成此操作的一种方法。

libname test pcfiles path=  'c:\_localdata\demo.xlsx';

data want;
set test.'Sheet1$'n (dbsastype=Random=char8);
run;

libname test;

0
投票

如果您的文件是 XLS 而不是 XLSX,SAS 会保留 Excel 文件中的列格式。

PROC IMPORT OUT=test DATAFILE= "C:\myfile.xls"
     DBMS=EXCELCS REPLACE;
     GETNAMES=YES;
RUN;

如果您在 Excel 文件中将列格式设置为文本,那么在 SAS 数据集中它将是文本(字符),即使它们看起来像数字。

请注意,此功能需要安装

PC Files Server
。请参阅PC 文件的 SAS/ACCESS


0
投票

第一个评论是,在 Excel 电子表格中,每个单元格都是独立“格式化”的。 但在数据集中,变量的所有值必须使用相同的类型(数字或字符)。 因此,当 SAS 从混合有数字和字符单元格的电子表格中导入列时,它必须决定要创建什么类型的变量。 它将使其成为字符,因为您可以将数字转换为数字字符串,但不能将所有字符串转换为数字。

第二条评论是,如果您导入完全相同的电子表格两次,您将得到完全相同的结果。 所以我假设您的意思是,当您导入不同的电子表格时,有时相关列会被制成字符变量,而有时它会被制成数字变量。 这是因为不同的电子表格的单元格中具有不同的信息。

如果您的列标题是字符单元格,那么强制 PROC IMPORT 使变量字符的最简单方法是使用 GETNAMES=No 以便包含标题单元格。 然后,您可以删除第一个观察并使用它来重命名变量。

PROC IMPORT DATAFILE= "C:\file.xlsx" DBMS=xlsx
   OUT=fullsheet REPLACE
;
   GETNAMES=No;
RUN;

PROC TRANSPOSE data=fullsheet(obs=1) out=names;
  var _all_;
run;
PROC SQL noprint;
  select catx('=',_name_,nliteral(col1)) into :renames separated by ' '
  from names;
QUIT;
data want;
  set fullsheet(firstobs=2);
   rename &renames;
run;
© www.soinside.com 2019 - 2024. All rights reserved.