Как вы вводите переменные с именами numeri c в SAS? - PullRequest
1 голос
/ 27 мая 2020

Я хотел бы ввести имена моих переменных в виде чисел, например, «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' et c. это имена переменной numeri c?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Вы можете использовать литералы имен для указания имен, которые не соответствуют обычным правилам, например '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
0 голосов
/ 27 мая 2020

Включите расширенные имена символов с помощью options 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.

...