读取SAS

时间:2015-12-09 21:54:36

标签: sas

我正在尝试将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."

2 个答案:

答案 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将转到下一行并从那里读取它 - 这是一个很大的问题,因为您的数据实际上并没有这样做。 (它通常会这样做,但不再那么多了。)您应该将TRUNCOVERMISSOVER添加到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;