我有以下数据文件
H 321 s main st
P mary e 21 f
P aby e 23 m
P stary e 31 f
P dory e 23 m
H 321 s second st
P lary e 31 m
P laby e 43 m
P ltary e 31 m
P lory e 23 m
P lwey e 43 f
P lwty e 35 f
P lowtetr e 25 m
H 4351 s 35343nd st
我尝试计算住在某个地址的人数。因此,结果数据集应该有3个观察值。
这是代码
data ch21.test2 ;
infile testFile end = last ;
retain address ;
input type $1. @ ;
if type = 'H' then
do ;
if _n_ > 1 then
output ;
total=0 ;
input @3 address $3-21 ;
end ;
else if type='P' then
input @3 name $12. +1 age 2. +1 gender $1. ;
total+1 ;
if last then
output ;
run ;
然而,我只得到一排。
答案 0 :(得分:2)
我不知道为什么你的代码中只有一行;我运行它时得到两个(可能是三个,我使用的datalines
不支持end
变量)。但是,do
条件周围没有else
循环,导致您得到错误的答案(可能比您应该高一个)。你的输入有点令人困惑,因为它结合了输入样式,但特别是没有错;我把它改成了我更舒服的东西,但你的工作也很好(它更难阅读)。然而,我确实给type
添加了@ 1,这可能是一个好主意;如果你有意想不到的输入问题,@ 1确保你正在读第一个字符(这就是你想要的)。
如果您仍然只获得一行,则可能是数据文件格式存在问题;也许它是一个UNIX文件,你在Windows机器上阅读,所以它不尊重EOL角色,例如。
data test2 ;
infile datalines end = last ;
retain address ;
input @1 type $1. @ ; *add @1;
if type = 'H' then
do ;
if _n_ > 1 then
output ;
total=0 ;
input @3 address $19. ; *converted to formatted style;
end ;
else if type='P' then do; *added do - you had indented here but did not have a do;
input @3 name $12. @15 age 2. @18 gender $1.; *converted to all formatted style;
total+1 ;
end; *added end - assuming if last then output should be outside?;
if last then
output ;
datalines;
H 321 s main st
P mary e 21 f
P aby e 23 m
P stary e 31 f
P dory e 23 m
H 321 s second st
P lary e 31 m
P laby e 43 m
P ltary e 31 m
P lory e 23 m
P lwey e 43 f
P lwty e 35 f
P lowtetr e 25 m
H 4351 s 35343nd st
;;;;
run;
答案 1 :(得分:-2)
您缺少&
。您的数据包含空格。试试这个
data ch21.test2 ;
infile testFile end = last ;
retain address ;
input type $1. @ ;
if type = 'H' then
do ;
if _n_ > 1 then
output ;
total=0 ;
input @3 address & $18. ; /* ADDED & and corrected to $18. */
end ;
else if type='P' then
input @3 name & $12. +1 age 2. +1 gender $1. ; /* ADDED & */
total+1 ;
if last then
output ;
run ;