【问题标题】:SAS CSV TO CHARACTER LEADING zerosSAS CSV 到字符前导零
【发布时间】:2013-06-17 13:47:47
【问题描述】:

在 SAS 9.3 中,我需要导入一个 CSV 文件,其中我的第一列有前导零。我已经重新搜索,只是无法弄清楚如何格式化声明。我已经完成了这个并且搞砸了 - 我知道有一种 z 格式可能有效但不确定如何合并?

data pharmacy;
infile "\\path\June 2013\test.csv"
dsd missover 
/*lrecl=512 pad*/
;
input 
    Field1 $ 1-10
/*  Field2 $*/
;
RUN;

【问题讨论】:

    标签: format sas


    【解决方案1】:

    假设您的数据格式如下:

    Field1, Field2
    00001,1.2
    00002,4.5
    00010,189.2
    00280546,0
    0145605616,6
    

    关于 Z. 格式,您的思路是正确的。

    如果您想将 Field1 保留为数字,则只需将其读取为数字 - SAS 将忽略前导零。但是你可以使用z10。作为 Field1 的格式。因此,当创建数据集时 - 它将以前导零显示。或者,如果您想将 Field1 存储为字符变量,那也很容易 - 只需将 Field1 读取为数字并使用 put(Field1, z10.) 重新格式化。

    DATA WORK.dummyImport;
        INFILE '/<path>/dummyImport.csv'  MISSOVER DSD FIRSTOBS=2 TERMSTR=CRLF; ;
        INPUT
            Field1           
            Field2           ;
        FORMAT FIELD1 Z10.;
        Field1_char=put(Field1, z10.);
    RUN;
    
    PROC PRINT DATA=WORK.DummyImport; RUN;
    

    返回:

    Field1  Field2  Field1_char 
    0000000001  1.2 0000000001
    0000000002  4.5 0000000002
    0000000010  189.2   0000000010
    0000280546  0   0000280546
    0145605616  6   0145605616
    

    【讨论】:

      【解决方案2】:

      当您导入 CSV 时,您肯定希望使用分隔符来发挥自己的优势。我发现您不太可能想要使用基于列的输入语句,例如Field1 $ 1-10。您是否尝试过以下简单的方法:

      data pharmacy;
         infile "\\path\June 2013\test.csv" dsd;
         input Field1 $ Field2 $;
      RUN;
      

      就个人而言,我几乎总是采取简单的方法,只使用proc import

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-01
        • 2017-02-27
        • 2019-10-25
        • 1970-01-01
        • 2018-04-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多