我正在尝试将txt文件读入SAS。以下是我的代码。我想有13行5列。我的输出只有6行。
data Voter_Population;
length Year 4 Voting_age_Population $11
Voter_Registration $11
Turnout $11
Turnout_Percent 4;
infile "&path\Voter Population.txt" dlm="\t" dsd;
input Year 1-4 Voting_age_Population $6-17
Voter_Registration $18-29
Turnout $31-42
Turnout_Percent 46-48;
运行;
这就是我的数据集的样子。
我不想使用datalines
。
1964 114,090,000 73,715,818 70,644,592 61.9
1968 120,328,186 81,658,180 73,211,875 60.8
1972 140,776,000 97,328,541 77,718,554 55.2
1976 152,309,190 105,037,986 81,555,789 53.6
1980 164,597,000 113,043,734 86,515,221 52.6
1984 174,466,000 124,150,614 92,652,680 53.1
1988 182,778,000 126,379,628 91,594,693 50.1
1992 189,529,000 133,821,178 104,405,155 55.1
1996 196,511,000 146,211,960 96,456,345 49.1
2000 205,815,000 156,421,311 105,586,274 51.3
2004 221,256,931 174,800,000 122,294,978 55.3
2008 231,229,580 0 132,618,580 56.8
2012 240,926,957 0 130,234,600 53.6
有人能帮助我吗? 这就是我要解决的问题
Year Voting_age_Population Voter_Registration Turnout Turnout_Percent
1964 "4 114,090,0" " 73,715,818" 70,644,592 1968
1972 "2 140,776,0" " 97,328,541" 77,718,554 1976
1980 "0 164,597,0" " 113,043,73" " 86,515,221" 52.6
1984 "4 174,466,0" " 124,150,61" " 92,652,680" 53.1
1988 "8 182,778,0" " 126,379,62" " 91,594,693" 50.1
1992 "2 189,529,0" " 133,821,17" " 104,405,15" " 55."
1996 "6 196,511,0" " 146,211,96" " 96,456,345" 49.1
2000 "0 205,815,0" " 156,421,31" " 105,586,27" " 51."
2004 "4 221,256,9" " 174,800,00" " 122,294,97" " 55."
答案 0 :(得分:0)
首先,您可能会误解LENGTH语句的作用。它是变量的存储字节数。数字默认为8个字节(双精度浮点)。对于字符变量,除非使用双字节字符集(DBCS),否则它是字符数。
通过使用$定义长度 - Voting_age_Population,Voter_Registration,Turnout - 您强制这些变量是字符而不是数字。您的所有数据都显示为数字。如果它们存储为字符字段,您将无法将它们用于平均值,模式,最大值,标准偏差或其他任何数字。
Chris J.是正确的,你应该使用COMMA12。字段2-4的信息。此外,如果字段之间有空格,则不需要指定起始列和结束列。
INPUT Year 4. Voting_age_Population COMMA12. Voter_Registration COMMA12. Turnout COMMA12. Turnout_Percent 4.1 ;
应该为您提供数值,然后您可以运行统计测试。
答案 1 :(得分:0)
无论Ludwig指出的其他问题如何,您遇到麻烦的具体原因是您没有正确输入数据。
首先,您的数据行长度不足以输入您的输入语句。这意味着,默认情况下,SAS将转到下一行并从那里读取它 - 这是一个很大的问题,因为您的数据实际上并没有这样做。 (它通常会这样做,但不再那么多了。)您应该将TRUNCOVER
或MISSOVER
添加到infile
语句中以获得该行为(SAS不会继续下一行)。
第二关,你明显有分隔数据,而不是固定宽度数据。除非你误导我们,无论如何,使用数据粘贴。它看起来像制表符分隔。这意味着你不应该指定列位置 - 因为它们可能会移位(例如,你的一些人口长度不是11位 - 实际上大多数都不是)。您似乎知道它已分隔 - 但您实际上并未使用正确的分隔(列表)输入。并且,你有错误的分隔符 - “\ t”是不对的。
正确的方法是使用INFORMAT(如下所示),更正分隔符,并使用列表输入。
data Voter_Population;
informat /* informat is what tells SAS how to read variables in - not length */
Year 4.
Voting_age_Population $12. /* or COMMA12. to become numeric*/
Voter_Registration $12. /* same */
Turnout $12. /* same*/
Turnout_Percent 4. /* I would make this longer - what if you have 100% turnout? */
;
infile "&path\Voter Population.txt" dlm="09"x /* right for tab delimiter */ dsd truncover;
input
Year
Voting_age_Population $
Voter_Registration $
Turnout $
Turnout_Percent
;
run;