Временные массивы SAS — ценная возможность SAS, о которой часто забывают. Я часто вижу, что многие начинающие и средние программисты SAS не знакомы с временными массивами. К счастью, в них нет ничего сложного, и они очень полезны. Прежде всего, что такое временный массив?
Начнем с "обычного" массива:
array x[10] x1-x10;
Этот массив x связан с 10 переменными x1-x10. (Помните, что в качестве имени массива можно использовать любое допустимое имя SAS, оно не должно быть связано с именами переменных.) Теперь перейдем к временному массиву.
array y[10] _temporary_;
Вы указываете ключевое слово _TEMPORARY_ там, где обычно указываете имена переменных. С временным массивом не связаны никакие переменные. В этом примере можно сослаться на переменную y[1] или y[2] и т.д., но переменных y1, y2 и т.д. нет.
Мое любимое использование временного массива - это поиск в таблице. Вы можете загрузить элементы временного массива, а затем использовать эти элементы для хранения значений. Пример приведен ниже:
У вас есть цели продаж за годы с 1 по 10 и показатели продаж для всех продавцов за эти 10 лет. Вы хотите сравнить продажи каждого продавца с целями продаж за 10 лет. Поместив 10 целей продаж во временный массив, вы можете получить цель для конкретного года. Элементы временного массива автоматически сохраняются в памяти, поэтому они идеально подходят для таких задач. Чтобы увидеть, как это работает, взгляните на следующий код:
*Program to demonstrate temporary arrays;
data Revenue;
array Goal[10] _temporary_;
*Load the temporary array with values;
if _n_ = 1 then do Year = 1 to 10;
input Goal[Year] @;
end;
*Now input the sales data;
input Name $ Year Sales;
Difference = Sales – Goal[Year];
datalines;
10 11 14 15 18 20 23 28 30 33
Fred 3 16
Joan 1 11
Helen 8 45
;
title "Listing of Data Set Revenue";
proc print data=Revenue noobs;
run;
Результат будет таким:
Возможно, вы захотите определить массив Goal:
array Goal[2001:2010] _temporary_;
В качестве индекса можно использовать фактическое значение за год. Обратите внимание на двоеточие между двумя годами. В результате индексы получают значения с 2001 по 2010. Кроме того, поскольку массивы могут быть многомерными, вы можете выполнять многонаправленные поисковые запросы. Попробуйте.