如何在SAS中输入具有数字名称的变量?

如何在SAS中输入具有数字名称的变量?,sas,Sas,我想以数字形式输入变量名称,例如“1950-1959”,我使用的是INPUT语句,但输出显示不正确 DATA data1; INPUT AgeGroup$ 1950-1959 1960-1969 1970-1979 1980-1989 1990-1992 Total; DATALINES; 20-29 1919 1808 1990 2175 154 8046 30-39 2616 4585 6580 6843 1921 22545 40-49 705 2661 5027 6

我想以数字形式输入变量名称,例如“1950-1959”,我使用的是INPUT语句,但输出显示不正确

DATA data1;
INPUT AgeGroup$ 1950-1959 1960-1969 1970-1979 1980-1989 1990-1992 Total;
DATALINES;
20-29 1919 1808  1990  2175   154  8046
30-39 2616 4585  6580  6843  1921 22545
40-49  705 2661  5027  6597  1812 16802
50-59   38  680  2562  4836  2127 10243
60-69    0   35   606  2314   831  3786
70-79    0    0    23   467   494   984
80-89    0    0     0    12    31    43
Total 5278 9769 16788 23244 7370  62449
;
RUN;
您能告诉我是否需要使用任何特殊字符来指定“1950-1959”等是数值变量的名称吗


谢谢

使用
选项validvarname=any启用扩展字符名,然后将每个字符名指定为名称文字,如
'this'n

options validvarname=any;

DATA data1;
INPUT AgeGroup$ '1950-1959'n '1960-1969'n '1970-1979'n '1980-1989'n '1990-1992'n Total;
DATALINES;
20-29 1919 1808  1990  2175   154  8046
30-39 2616 4585  6580  6843  1921 22545
40-49  705 2661  5027  6597  1812 16802
50-59   38  680  2562  4836  2127 10243
60-69    0   35   606  2314   831  3786
70-79    0    0    23   467   494   984
80-89    0    0     0    12    31    43
Total 5278 9769 16788 23244 7370  62449
;
RUN;

大多数现代SAS应用程序都会自动指定此选项,但有时您会遇到仍有v7名称的系统。

您可以使用名称文字来指定不符合正常规则的名称,例如
'1950-1959'n
。确保VALIDVARNAME选项设置为ANY,以便SAS允许使用非标准名称。您可以为变量使用标准名称,并使用标签存储该描述

input AgeGroup :$5. period1-period6 ;
label period1 = '1950-1959' period2 = '1960-1969' ....
将时间段存储到变量中可能更有用

data data1;
  length AgeGroup $5 Period $9 count 8;
  input AgeGroup @;
  do period='1950-1959','1960-1969','1970-1979','1980-1989','1990-1992','Total';
    input count @;
    output;
  end;
datalines;
20-29 1919 1808  1990  2175   154  8046
30-39 2616 4585  6580  6843  1921 22545
40-49  705 2661  5027  6597  1812 16802
50-59   38  680  2562  4836  2127 10243
60-69    0   35   606  2314   831  3786
70-79    0    0    23   467   494   984
80-89    0    0     0    12    31    43
Total 5278 9769 16788 23244 7370  62449
;
在这种结构中,您可以更轻松地筛选时间段子集的数据。但是,您仍然可以轻松地创建一个报告,在该表格布局中显示数据

proc report data=data1;
  columns agegroup count,period ;
  define agegroup / group ;
  define period / across ' ';
  define count / ' ';
run;
结果:

  AgeGr
  oup    1950-1959  1960-1969  1970-1979  1980-1989  1990-1992      Total
  20-29       1919       1808       1990       2175        154       8046
  30-39       2616       4585       6580       6843       1921      22545
  40-49        705       2661       5027       6597       1812      16802
  50-59         38        680       2562       4836       2127      10243
  60-69          0         35        606       2314        831       3786
  70-79          0          0         23        467        494        984
  80-89          0          0          0         12         31         43
  Total       5278       9769      16788      23244       7370      62449

为什么不使用该文本作为变量的标签而不是名称?或者,为什么不创建一个更垂直的数据结构,其中年份信息存储在变量的值中,而不是元数据(变量名称或标签)?@CC25,一旦你进行分类(将时间段存储到变量中更有用),你就不会返回了!