3

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

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

2 回答 2

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
于 2013-06-18T09:39:12.813 回答
0

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

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

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

于 2013-06-17T17:18:55.187 回答