【问题标题】:SAS Proc Import csv file with columns enclosed in quotation marksSAS Proc 导入 csv 文件,列用引号括起来
【发布时间】:2016-09-15 12:57:45
【问题描述】:

我有一个特殊的问题。我导出了一个 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 真的像吗?然后你必须添加delimiter='|';。还是这只是一个抽象样本?
  • 抱歉只是抽象的例子。从示例中删除了管道
  • 问题是什么?您是在问 PROC IMPORT 是否足够聪明,可以确定哪些列是数字的,哪些是字符的?

标签: csv import sas proc quotation-marks


【解决方案1】:

如果您使用 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"
;

将产生如下值:

【讨论】:

    【解决方案2】:

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

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

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

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

    编辑:基于问题编辑,最准确的方法是通过数据步骤读取。如前所述,DSD 选项将处理引号。

    【讨论】:

    • 对不起,这个例子只是抽象的。我已经编辑并删除了管道。
    • 现在我可能有一个大数据样本,但如果要导入的文件只有 5 行或 10 行,GuessingRows 将无法工作?
    猜你喜欢
    • 2015-12-05
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 2018-07-22
    • 2020-09-18
    相关资源
    最近更新 更多