SAS Proc导入csv文件,其中的列用引号括起来

时间:2016-09-15 12:57:46

标签: csv import sas proc quotation-marks

我有一个特别的问题。我已经导出了一个csv文件,我在某些列上需要将数据放入quoation-marks中,因为前导零,有时一个长数据包在导出时包含“E”。现在我正在尝试将相同的文件导入SAS,以查看我的proc import-routine是否有效。

当我导入文件时,所有数据都会通过,但当我实际导出20列时,会被压缩成两列(因此我的分隔符错误?)。

并非所有列都用引号括起来,只是其中几个。数据的一个例子:

CustomerID  CustomerName Product  Price  BillingNR 

"01234"       Customer 1   Product1 Price1 "03541"     
"52465"       Customer 2   Product2 Price2 ""          
"23454"       Customer 3   Product3 Price3 "035411236952154589632154"

然后将CustomerID和BillingNR括在引号中。

如果只有一些列用引号括起来而其他列不是,则如何导入此数据集? 或者只是从导入时删除所有双引号?继承我的代码:

%macro import;

%if &exist= "Yes" %then %do;
    proc import
    datafile= "\\mypath\data.csv"
        DBMS=CSV
        out=Sales
        replace;
        getnames=YES;
    run;
%end;

%else %do;
%put Nothing happens;
%end;


%mend;

%lesInn;

IF / ELSE测试只是另一个宏,我测试指定的文件是否存在。我试图研究不同的方法,我仍在寻找类似的问题,但似乎没有任何工作。

所有答案都非常感谢。

托尔

2 个答案:

答案 0 :(得分:0)

CSV - >逗号分隔值 我没有看到逗号被用作分隔符,而是管道。

指定您的分隔符是管道,并将GUESSINGROWS选项增加到一个大数字,以便它分配正确的长度和类型。

Proc import ... DBMS = DLM Replace;
Delimiter='|'; 
GuessingRows=10000; 
....remaining options;
 Run;

我还不确定Proc Import是否有效。如果您不需要编写数据步骤代码并确保指定将处理引号的DSD选项。

编辑:根据问题编辑,最准确的方法是通过数据步骤进行读取。如上所述,DSD选项将处理报价。

答案 1 :(得分:0)

如果您使用DSD选项读取文件,则SAS将自动删除值周围的引号。即使是大多数示例数据都不需要引用值的引号。

data want ;
  infile cards dsd truncover firstobs=2;
  length CustomerID $5 CustomerName $20 Product $20 Price $8  BillingNR $30 ;
  input CustomerID -- BillingNR ;
cards;
CustomerID,CustomerName,Product,Price,BillingNR
"01234",Customer 1,Product1,Price1,"03541"
"52465",Customer 2,Product2,Price2,""
"23454",Customer 3,Product3,Price3,"035411236952154589632154"
;

会产生如下值: enter image description here

相关问题