SAS Proc 导入列用引号引起来的 csv 文件

SAS Proc Import csv file with columns enclosed in quotation marks

我有一个特别的问题。我已经导出了一个 csv 文件,在某些列中,由于前导零,我需要将数据放在引号中,有时在导出时长数据编号包含 "E"。现在我试图将同一个文件导入 SAS 以查看我的 proc 导入例程是否有效。

当我导入文件时,所有数据都通过了,但在我实际导出 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-test 只是我测试指定文件是否存在的另一个宏。我尝试研究不同的方法,并且仍在寻找类似的问题,但似乎没有任何效果。

非常感谢所有答案。

图尔

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

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

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

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

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

如果您使用 DSD 选项读取文件,则 SAS 会自动删除值周围的引号。甚至不需要引用的值周围的引号,就像您的大多数示例数据一样。

data want ;
  infile cards dsd truncover firstobs=2;
  length CustomerID  CustomerName  Product  Price   BillingNR  ;
  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"
;

将产生如下值: