【发布时间】:2019-10-16 18:52:52
【问题描述】:
我正在完成一项 SAS 练习,其中包含以下格式的数据:
3496 Jerry Nelson 13960 Wilson Dr. San Diego CA 92191 40 4
3498 Scott Mason 9226 College Dr. Oak View CA 93022 95 2
3498 CA 35 3
3498 CA 35 11
3500 Michele Stone 8393 West Ct. Emeryville CA 94608 55 5
3500 CA 70 5
对于每个人,数据会一直持续到下一个人的姓名。我认为以下代码非常接近我的需要:
libname Ch4data '\\Client\C$\Users\m210028\Google Drive\Adrian\Self-Study\SAS\Chapter4_data';
Data Ch4data.my_donations;
Infile '\\Client\C$\Users\m210028\Google Drive\Adrian\Self-Study\SAS\Chapter4_data\Donations.dat' MISSOVER;
Array amounts(10);
Array months(10);
Input first_name $ 6 - 19
last_name $ 20 - 33
street_address $ 34 - 58
city $ 59 - 88
state_code $ 89 - 93
zip_code $ 94 - 100
amounts(1) 101 - 105 @ 106
months(1);
end = end1;
If ~(end1) Then
Do;
Input test_char $ 6-6 @;
i = 2;
Do While (0 = ANYALPHA(test_char));
Input amounts(i) 101 - 105 @ 106
months(i);
end = end1;
If ~(end1) Then Input test_char $ 6-6 @;
Else test_char = '';
i = i+1;
End;
End;
Run;
Proc Print Data = Ch4data.my_donations;
Title 'Donations to Coastal Humane Society';
Run;
问题是我在日志中收到一张 LOST CARD 注释,而文件中的姓氏 Michele Stone 没有进入数据集。我怀疑我用于检测文件结尾的代码不正确。有人可以告诉我如何检测文件结尾吗? SAS 文档没有帮助。
非常感谢您的宝贵时间!
[更新]:感谢汤姆的评论,我现在可以使用以下代码获得最后一行:
libname Ch4data '\\Client\C$\Users\m210028\Google Drive\Adrian\Self-Study\SAS\Chapter4_data';
Data Ch4data.my_donations;
Infile '\\Client\C$\Users\m210028\Google Drive\Adrian\Self-Study\SAS\Chapter4_data\Donations.dat' MISSOVER END=end1;
Array amounts(10);
Array months(10);
Input first_name $ 6 - 19
last_name $ 20 - 33
street_address $ 34 - 58
city $ 59 - 88
state_code $ 89 - 93
zip_code $ 94 - 100
amounts(1) 101 - 105 @ 106
months(1);
If ~(end1) Then
Do;
Input test_char $ 6-6 @;
i = 2;
Do While (0 = ANYALPHA(test_char));
Input amounts(i) 101 - 105 @ 106
months(i);
If ~(end1) Then Input test_char $ 6-6 @;
Else test_char = '';
i = i+1;
End;
End;
Run;
Proc Print Data = Ch4data.my_donations;
Title 'Donations to Coastal Humane Society';
Run;
不幸的是,它没有排到倒数第二行。就此而言,它跳过了很多第一行记录。想法?
【问题讨论】:
-
您的 INFILE 语句中没有包含 END= 选项。
-
啊,我明白了。好吧,这让我得到了最后一行,但现在我没有得到倒数第二行!即将更新代码。
标签: sas