SAS CSV TO CHARACTER LEADING零

时间:2013-06-17 13:47:48

标签: format sas

在SAS 9.3中,我需要导入一个CSV文件,我的第一列有前导零。我已经研究过,并且无法弄清楚如何格式化语句。我已经这样做了并且搞砸了 - 我知道有一种z格式可以工作但不确定如何合并?

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

2 个答案:

答案 0 :(得分:4)

假设您的数据采用以下格式:

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

答案 1 :(得分:0)

当您导入CSV时,您肯定希望使用分隔符。我发现你不太可能想要使用基于列的输入语句,例如Field1 $ 1-10。你尝试过这么简单的事情:

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

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