使用SAS读取大字符串数据

时间:2016-05-25 19:46:42

标签: string csv sas

我想用SAS读取带有大字符串的.csv文件。这是我的文件tmp.csv,采用逗号分隔值格式

1,1005725,[(B42.ND761).B437]1-8-1-1-1-3-3-3-2-2/RT0658,5S3563A/RT0658,,,5S3563A,RT0658
2,09VL101,20347 PL6 O94 E98-1-0/K9616LM,19058/K9616LM,19058,,19058,K9616LM
3,09VL102,20351 PL6-1-0/K9616LM 19060/K9616LM,,19060,,19060,K9616LM
4,09VL103,20347 PL6 O94 E98-2-0/K9962LM,AID19058A/K9962LM,19058,,AID19058A,K9962LM
5,09VL105,,V4649A/F0001LM,,,V4649A,F0001LM

我已经使用过这段代码,但它没有用。

DATA datos;
INFILE "C:\Users\UserName\Documents\tmp.csv" DLM="," DSD MISSOVER;
INPUT Num Code :$7. Pedigree  : $44. LineCode : $17. FemaleCode $5. MaleCode $ NFemale $9. NMale $7. ;
RUN;

这应该是结果

Correct Data

2 个答案:

答案 0 :(得分:1)

我认为乔有正确的想法 - 你的变量长度搞砸了。我能够使用您的代码生成所需的结果,但需要对变量进行重命名和调整大小。

DATA datos;
    INFILE "C:\Users\UserName\Documents\tmp.csv" DLM="," DSD MISSOVER;
    INPUT a:$1. b:$7. c:$44. d:$17. e:$5. f:$9. g:$7.;
RUN;

enter image description here

答案 1 :(得分:0)

我知道你似乎是通过将信息放在输入语句中来保存输入,但我认为首先定义变量然后编写输入语句要容易得多。特别是从分隔文件中读取时。如果您按照想要读取它们的顺序定义变量,您甚至可以在INPUT语句中使用变量列表。

DATA datos;
  INFILE "C:\Users\UserName\Documents\tmp.csv" DSD TRUNCOVER;
  LENGTH NumCode $7 Pedigree $44 LineCode $17 FemaleCode $5 NFemale $9 NMale $7 ;
  INPUT NumCode -- NMale ;
RUN;

通常,最好在INFILE语句中使用TRUNCOVER而不是MISSOVER选项。大多数情况下,当您要求它读取7个字符并且只有3个可用时,您不希望SAS将值设置为丢失。您希望SAS使用可用的3个字符。它不会对分隔输入产生影响,但如果使用不带:修饰符的格式化输入,则可能会遗漏数据。