2017-10-10 116 views
0

我想了解如何读取SAS格式不正确的数据。波纹管是片段,也是我尝试的开始。我也试着做一个if语句,但不知道如何为每一行声明一个格式。例如:读取格式不正确的数据

if _N_ then [format for this line goes here];

data prob2; 
length name $ 8 ; 
infile rawdata(Group2.txt) truncover; 
input Code Name X Y Z; 
proc print data=prob2; 
run; 

的样本数据:

10 Arnold 123 21 333 
20 Barbara 11 387 
30 176 265 3876 
Daniel 154 39876 
50 Elmo 176 256 33 
60 Fifi 198 298 
70 Gizmo 288 354 
80 376 
90 Isaac 100 267 322 

预期输出:

Code Name  X Y  Z 
----------------------------- 
10 | Arnold | 123 | 21 | 333 
20 | Barbara| 11 | 387| . 
30 |  . | 176| 265| 3876 
. | Daniel | 154| 39| 876 
50 | Elmo | 176| 256| 33 
60 | Fifi | 198| 298| . 
70 | Gizmo | 288| 354| . 
80 | . | 376| . | . 
90 | Isaac | 100| 267| 322 
----------------------------- 
+0

请发表你已经尝试了什么,以及你期望的输出是什么。例如,最后的第二行应该是什么?你能假定一个空格是分隔符吗? – Reeza

+0

我已经发布,现在,两个。我试过的是数据区上方的片段,最后一个块是预期的输出。 – StillLearningToCode

+0

尝试'infile rawdata(Group2.txt)delimter =''dsd;' – david25272

回答

0

david25272的解决方案是工作。

option missing=.; 

data begin; 
    INFILE DATALINES DLM=' ' dsd; 
    input Code Name $ X Y Z; 
    datalines; 
10 Arnold 123 21 333 
20 Barbara 11 387 
30 176 265 3876 
Daniel 154 39876 
50 Elmo 176 256 33 
60 Fifi 198 298 
70 Gizmo 288 354 
80 376 
90 Isaac 100 267 322 
; 
run; 

主要生产

Code Name X Y Z 
10 Arnold 123 21 333 
20 Barbara 11 387 . 
30  176 265 3876 
. Daniel 154 . 39876 
50 Elmo 176 256 33 
60 Fifi 198 298 . 
70 Gizmo 288 354 . 
80  376 . . 
90 Isaac 100 267 322 

然而,这是空间敏感,如果可能的话,我建议增加一个分隔符,以您的数据。使用简单的替换功能非常简单。

编辑:发现在输入数据的精彩论文: http://www2.sas.com/proceedings/sugi29/253-29.pdf