首页 文章

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

提问于
浏览
0

我有一个特别的问题 . 我已经导出了一个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括在引号中 .

如果只有一些列用引号括起来而其他列不是,则如何导入此数据集? Or simply remove all double quotes from the when importing? 继承我的代码:

%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

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

  • 0

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

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

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

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

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

相关问题