Глава 10 Циклическая обработка данных. Раздел 10.1 Использование цикла типа DO.

Презентация:



Advertisements
Похожие презентации
«Обработка массивов данных» Delphi. Тема 4:4: «Обработка массивов данных» План темы: l1l1. Понятие массива данных. l2l2. Описание массива в программе.
Advertisements

Массивы 9 класс. Основные теоретические сведения Примеры решения задач.
Циклом Циклом называется операция, в которой одни и те же действия повторяются многократно. Цикл состоит из оператора цикла и тела цикла. Оператор цикла.
ПРОГРАММИРОВАНИЕ ПОВТОРЕНИЙ МОУ «Средняя общеобразовательная школа 41» Учитель информатики: Рассохина Г.В. САРАНСК 2008.
Организация данных в виде массива. Массив - это упорядоченный набор фиксированного количества некоторых значений, называемых элементами массива. Каждый.
Массивы Вариант 1 Program upr1; Var s,a:real; I: integer; Begin S:=0; For I:=1 to 10 do Begin Writeln (введите очередное число'); Readln(a); S: =s+a; End;
Глава 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор присваивания Простой и составной операторы Условный оператор Оператор множественного выбора Оператор цикла с предусловием.
Оператор цикла с предусловием. Оператор цикла с предусловием используется в тех случаях, когда заранее неизвестно число повторений цикла. Форма записи.
Организация циклических процессов начало К:=1 S:=1 N:=5 K<=N S:=S*K K:=K+1 S конец данет При решении многих задач вычислительный процесс имеет циклический.
Двумерный массив Учитель информатики МБОУ «Марковская СОШ» Репникова С.А.
Файловый тип данных Turbo Pascal Операции для работы с файлами 11 класс.
Тема урока: Массив. Описание массивов. Заполнение массивов.
Что произойдет, если на каждой итерации цикла For… To уменьшать счетчик? а) программа «зациклится»; б) цикл выполнится меньшее количество раз; в) возникнет.
Цикл - это специальная конструкция языка, позволяющая запрограммировать многократное выполнение определённого блока команд Итерация - это каждый проход.
АЛГОРИТМИЧЕСКАЯ СТРУКТУРА «ПОВТОРЕНИЕ» («ЦИКЛ») В ЯЗЫКЕ QBASIC Презентацию разработал Мащенко П.С., учитель МБОУ СОШ 2 муниципального образования Щербиновский.
Одномерный массив. Цель урока: познакомить учащихся с понятием одномерный массив Задачи: дать определение массива дать представление: об описании массива.
Одномерные массивы. Массив – это конечный, последовательный набор элементов одного типа, связанных общим именем Простейшая форма – одномерный массив(линейная.
Циклы в C++. Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. В этом уроке мы научимся программировать.
© М.Е.Макарова
ОДНОМЕРНЫЕ МАССИВЫ. В математике, экономике, информатике часто используются упорядоченные наборы данных, например, последовательности чисел, таблицы,
Транксрипт:

Глава 10 Циклическая обработка данных

Раздел 10.1 Использование цикла типа DO

3 Цели Изучить цикл DO. Изучить цикл DO. Использовать DO Loop для создания данных. Использовать DO Loop для создания данных. Использовать DO Loop для устранения избыточности программного кода. Использовать DO Loop для устранения избыточности программного кода. Использовать DO Loop для условной обработки существующего кода. Использовать DO Loop для условной обработки существующего кода.

4 Работа цикла DO Операторы внутри цикла DO выполняются определенное количество итераций или до тех пор, пока отдельное условие не остановит цикл. DATA statement SAS statements DO statement iterated SAS statements END statement SAS statements RUN statement

5 Работа цикла DO Цикл DO можно использовать для того, чтобы выполнять многократные вычисления выполнять многократные вычисления создавать данные создавать данные устранять избыточность программного кода устранять избыточность программного кода выполнять условную обработку SAS кода. выполнять условную обработку SAS кода.

6 Повторяющееся кодирование data compound; Amount=50000; Rate=.075; Yearly=Amount*Rate; Quarterly+((Quarterly+Amount)*Rate/4); run;

7 Повторяющееся кодирование proc print data=compound noobs; run; Amount Rate Yearly Quarterly Задача: вычислить долю прибыли за 20 лет (т.е. за 80 кварталов). PROC PRINT Output

8 Работа цикла DO data compound(drop=Qtr); Amount=50000; Rate=.075; Yearly=Amount*Rate; do Qtr=1 to 4; Quarterly+((Quarterly+Amount)*Rate/4); end; run;

9 Итеративный оператор DO выполняет команды цикла DO и END повторно, на основе значений индексной переменной. specification-1…specification-n может быть диапазон значений или перечень определенных значений. Синтаксис структуры DO DO index-variable=specification-1 ; END;

10 Синтаксис структуры DO: где start – начальное значение start – начальное значение stop – конечное значение stop – конечное значение increment – шаг изменения. increment – шаг изменения. Синтаксис структуры DO DO index-variable=start TO stop ;

11... Синтаксис структуры DO Можно задать начальное, конечное значения, а также шаг изменения: do i=1 to 12; do j=2 to 10 by 2; do k=14 to 2 by –2; do m=3.6 to 3.8 by.05; Out of range

12 Синтаксис структуры DO item-1... item-n могут быть либо числовыми, либо символьными константами, или они все могут быть переменными. Цикл DO выполняется один раз для каждого значения в списке. DO index-variable=item-1 ;

13... do Month='JAN','FEB','MAR'; do Fib=1,2,3,5,8,13,21; do i=Var1,Var2,Var3; do j=BeginDate to Today() by 7; do k=Test1-Test50; Многократный оператор DO Сколько раз выполняется цикл DO? 3 раза. 7 раз. 3 раза. Неизвестно. Количество итераций зависит от значений BeginDate и Today(). 1 раз. Единственное значение k – это разница между Test50 и Test1.

14 Выполнение повторяющихся вычислений Каждый год 1 января на счет поступает $5,000. Определить, какая сумма будет на счету через три года, учитывая при этом ставку 7.5 процента. data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run;

15 data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; Выполнение YEARCAPITAL _N_ D... PDV

16 YEAR. CAPITAL 0 _N_ 1 D... Переинициализация PDV. data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; PDV

17 YEAR 2001 CAPITAL 0 _N_ 1... data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; D PDV

18 YEAR 2001 CAPITAL 5000 _N_ 1... data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; D PDV

19... YEAR 2001 CAPITAL 5375 _N_ 1 data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; D PDV (5000 *.075)

20... YEAR 2002 CAPITAL 5375 _N_ 1 data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; D PDV Year + 1

21... YEAR 2002 CAPITAL 5375 _N_ 1 data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; Значение Year вышло из диапазона? D PDV

22 YEAR 2002 CAPITAL _N_ 1 data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run;... D PDV

23... YEAR 2002 CAPITAL _N_ 1 data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; D PDV (10375 *.075)

24... YEAR 2003 CAPITAL _N_ 1 data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; D PDV Year + 1

25... YEAR 2003 CAPITAL _N_ 1 data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; D PDV Значение Year вышло из диапазона?

26 YEAR 2003 CAPITAL _N_ 1 data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run;... D PDV

27... YEAR 2003 CAPITAL data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; _N_ ( *.075) D PDV

28... YEAR 2004 CAPITAL _N_ 1 D data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; PDV Year + 1

29... YEAR 2004 CAPITAL _N_ 1 data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; D PDV Значение Year вышло из диапазона?

30... YEAR 2004 CAPITAL _N_ 1 data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; D PDV

31... PDV Запись наблюдения в invest. YEAR 2004 CAPITAL _N_ 1 data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; Неявный вывод D

32 Выполнение повторяющихся вычислений Year Capital proc print data=invest noobs; run; PROC PRINT Output

33 Выполнение повторяющихся вычислений data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); output; end; run; proc print data=invest noobs; run; Создать отдельные наблюдения для каждого года.

34 Выполнение повторяющихся вычислений Year Capital PROC PRINT Output Почему значение переменной Year в последней записи не равно 2004?

35 Устранение избыточности кода Задача: прогноз роста количества сотрудников различных подразделений авиакомпании. Partial Listing of prog2. growth Num Division Emps Increase APTOPS FINACE FLTOPS

36 Задача data forecast; set prog2.growth(rename=(NumEmps=NewTotal)); Year=1; NewTotal=NewTotal*(1+Increase); output; Year=2; NewTotal=NewTotal*(1+Increase); output; Year=3; NewTotal=NewTotal*(1+Increase); output; run; Как выполнить прогноз на следующие 30 лет?

37 Устранение избыточности кода Используйте цикл DO, чтобы исключить чрезмерный код из предыдущей задачи. data forecast; set prog2.growth(rename=(NumEmps=NewTotal)); do Year=1 to 3; NewTotal=NewTotal*(1+Increase); output; end; run;

38 Устранение избыточности кода proc print data=forecast noobs; run; PROC PRINT Output New Division Total Increase Year APTOPS APTOPS APTOPS FINACE

39 Задание итеративной обработки Чтобы остановить работу цикла, вы можете использовать операторы DO WHILE и DO UNTIL. Во избежание зацикливания убедитесь, что определенное условие встречается в программе.

40 Синтаксис команды DO WHILE: Операторы цикла никогда не выполняются, если expression первоначально является ложным. Оператор DO WHILE DO WHILE (expression); END;

41 Оператор DO UNTIL Синтаксис команды DO UNTIL: Операторы внутри цикла выполняются, по меньшей мере, один раз. DO UNTIL (expression); END;

42 Задание итеративной обработки Определить количество лет, которые понадобятся, чтобы счет достиг суммы $1,000,000, если сумма $5,000 ежегодно инвестируется на 7.5 процентов.

43 Задание итеративной обработки data invest; do until(Capital> ); Year+1; Capital+5000; Capital+(Capital*.075); end; run; proc print data=invest noobs; run;

44 Задание итеративной обработки PROC PRINT Output Capital Year

45 Итеративный оператор DO с условным предложением Вы можете комбинировать операторы DO WHILE и DO UNTIL с итеративным оператором DO. Это один из методов избежать зацикливания команд DO WHILE или DO UNTIL. DO index-variable=start TO stop WHILE | UNTIL (expression); END;

46 Итеративный оператор DO с условным предложением Закрыть счет через 25 лет или, если сумма на счету достигла $250,000.

47 Итеративный оператор DO с условным предложением data invest; do Year=1 to 25 until(Capital>250000); Capital+5000; Capital+(Capital*.075); end; run; proc print data=invest noobs; run;

48 Итеративный оператор DO с условным предложением PROC PRINT Output Year Capital

49 Вложенный цикл Вложенный цикл DO – это цикл внутри цикла. Кода вы работаете с вложенными циклами DO, используйте разные индексные переменные для каждого цикла используйте разные индексные переменные для каждого цикла проверяйте, что каждый оператор DO закрывается соответствующим оператором END. проверяйте, что каждый оператор DO закрывается соответствующим оператором END.

50 Вложенный цикл Создать одно наблюдение на год за пять лет и показать прибыль, если вы вложили $5,000 под годовой процент 7.5, начисляемый каждый квартал.

51... data invest(drop=Quarter); do Year=1 to 5; Capital+5000; do Quarter=1 to 4; Capital+(Capital*(.075/4)); end; output; end; run; proc print data=invest noobs; run; Вложенный цикл 5x5x4x4x

52 PROC PRINT Output Вложенный цикл Year Capital

53 Вложенный цикл Сравните результаты инвестиций $5,000 в год на пять лет в три различных банка, с начислением процентов поквартально. Каждый банк имеет фиксированную процентную ставку. prog2. Banks Name Rate Calhoun Bank and Trust State Savings Bank National Savings and Trust

54... Вложенный цикл data invest(drop=Quarter Year); set prog2.banks; Capital=0; do Year=1 to 5; Capital+5000; do Quarter=1 to 4; Capital+(Capital*(Rate/4)); end; run; 4x4x 5x5x 3x3x

55... Вложенный цикл NAME Calhoun Bank and Trust RATE _N_ 1 Partial PDV D data invest(drop=Quarter Year); set prog2.banks; Capital=0; do Year=1 to 5; Capital+5000; do Quarter=1 to 4; Capital+(Capital*(Rate/4)); end; end; run; (0.0718/4));

56... Вложенный цикл NAME State Savings Bank RATE _N_ 2 Partial PDV D data invest(drop=Quarter Year); set prog2.banks; Capital=0; do Year=1 to 5; Capital+5000; do Quarter=1 to 4; Capital+(Capital*(Rate/4)); end; end; run; (0.0721/4));

57... Вложенный цикл NAME National Savings and Trust RATE _N_ 3 Partial PDV D data invest(drop=Quarter Year); set prog2.banks; Capital=0; do Year=1 to 5; Capital+5000; do Quarter=1 to 4; Capital+(Capital*(Rate/4)); end; end; run; (0.0728/4));

58 Вложенный цикл PROC PRINT Output PROC PRINT Output Name Rate Capital Calhoun Bank and Trust State Savings Bank National Savings and Trust proc print data=invest noobs; run;

Раздел 10.2 Обработка SAS массива

60 Цели Изучить понятие SAS массивы. Изучить понятие SAS массивы. Использовать SAS массивы для выполнения повторяющихся вычислений. Использовать SAS массивы для выполнения повторяющихся вычислений.

61 Выполнение повторяющихся вычислений Сотрудники компании каждый квартал перечисляют некоторую сумму на благотворительность. Набор данных prog2. donate содержит размер взноса каждого сотрудника. Компания дополнительно добавляет по 25 процентов. Вычислить взнос каждого сотрудника, включая дополнительную сумму от компании. Partial Listing of prog2. donate ID Qtr1 Qtr2 Qtr3 Qtr4 E E

62 Выполнение повторяющихся вычислений data charity; set prog2.donate; Qtr1=Qtr1*1.25; Qtr2=Qtr2*1.25; Qtr3=Qtr3*1.25; Qtr4=Qtr4*1.25; run; proc print data=charity noobs; run;

63 PROC PRINT Output Задача: подобным образом модифицировать данные за 52 недели, которые хранятся в наборах с Week1 по Week52. Выполнение повторяющихся вычислений ID Qtr1 Qtr2 Qtr3 Qtr4 E E E E E

64 Обработка массива Вы можете использовать массив, чтобы упростить программный код, который выполняет повторяющиеся вычисления выполняет повторяющиеся вычисления создает новые переменные с одинаковыми атрибутами создает новые переменные с одинаковыми атрибутами считывает данные считывает данные изменяет SAS наборы данных, перемещая переменные в наблюдения, а наблюдения – в переменные изменяет SAS наборы данных, перемещая переменные в наблюдения, а наблюдения – в переменные сравнивает переменные сравнивает переменные выполняет поиск по таблице. выполняет поиск по таблице.

65 Массивы в SAS Массив SAS это временный набор SAS переменных, сгруппированных в определенном порядке это временный набор SAS переменных, сгруппированных в определенном порядке отождествляется по имени массива отождествляется по имени массива существует только во время выполнения текущего шага данных существует только во время выполнения текущего шага данных это не переменная. это не переменная.

66 Массивы в SAS Каждое значение в массиве называется элемент называется элемент указывается с помощью списка элементов, который определяет позицию элемента в массиве. указывается с помощью списка элементов, который определяет позицию элемента в массиве. Когда вы используете ссылку на массив, то соответствующее значение подставляется для этого обращения.

67... Массивы в SAS D IDQTR4QTR2QTR3QTR1 Первый элемент Второй элемент Третий элемент Четвертый элемент Ссылки на массив CONTRIB{1}CONTRIB{2}CONTRIB{3}CONTRIB{4} CONTRIB Имя массива

68 Оператор ARRAY Оператор ARRAY определяет элементы массива. Эти элементы будут обрабатываться как единая группа. Вы ссылаетесь на элементы массива по имени массива и индекса. ARRAY array-name {subscript} ;

69 Оператор ARRAY должен содержать либо только числовые, либо символьные элементы должен содержать либо только числовые, либо символьные элементы должен использоваться для описания массива до того, как осуществляет ссылка на имя массива должен использоваться для описания массива до того, как осуществляет ссылка на имя массива создает переменные, если они еще не существуют в PDV создает переменные, если они еще не существуют в PDV это оператор, выполняемый в процессе компиляции. это оператор, выполняемый в процессе компиляции.

70... Определение массива Оператор ARRAY, который описывает четыре переменные (поквартальные взносы), как элементы массива. array Contrib{4} Qtr1 Qtr2 Qtr3 Qtr4; Первый элемент Второй элемент Третий элемент Четвертый элемент IDQTR4QTR2QTR3QTR1 CONTRIB

71... Определение массива Переменные, которые являются элементами массива, могут не иметь похожие, пронумерованные или связанные имена. array Contrib2{4} Q1 Qrtr2 ThrdQ Qtr4; QTR4QRTR2THRDQQ1 CONTRIB2 Первый элемент Второй элемент Третий элемент Четвертый элемент ID

72 Обработка массива Циклы DO часто используются для обработки каждого элемента массива. Синтаксис итеративного цикла DO имеет следующий вид: Чтобы выполнить цикл столько раз, сколько элементов в массиве, укажите диапазон значений индексной переменной от 1 до количество-элементов-массива. DO index-variable=1 TO number-of-elements-in-array; additional SAS statements using array-name{index-variable}… END;

73 CONTRIB{QTR} 4 CONTRIB{4} 3 CONTRIB{3} 2 CONTRIB{2} Обработка массива array Contrib{4} Qtr1 Qtr2 Qtr3 Qtr4; do Qtr=1 to 4; Contrib{Qtr}=Contrib{Qtr}*1.25; end; QTR4 QTR2 QTR3 QTR1 1 Значение индексной переменной Qtr CONTRIB{1} Ссылка на массив... Первый элемент Второй элемент Третий элемент Четвертый элемент

74... Выполнение повторяющихся вычислений Выполнение повторяющихся вычислений data charity(drop=Qtr); set prog2.donate; array Contrib{4} Qtr1 Qtr2 Qtr3 Qtr4; do Qtr=1 to 4; Contrib{Qtr}=Contrib{Qtr}*1.25; end; run;

75... Выполнение повторяющихся вычислений When Qtr =1 Qtr1=Qtr1*1.25; data charity(drop=Qtr); set prog2.donate; array Contrib{4} Qtr1 Qtr2 Qtr3 Qtr4; do Qtr=1 to 4; Contrib{Qtr}=Contrib{Qtr}*1.25; end; run; Contrib{1}=Contrib{1}*1.25;

76... Выполнение повторяющихся вычислений When Qtr =2 Qtr2=Qtr2*1.25; data charity(drop=Qtr); set prog2.donate; array Contrib{4} Qtr1 Qtr2 Qtr3 Qtr4; do Qtr=1 to 4; Contrib{Qtr}=Contrib{Qtr}*1.25; end; run; Contrib{2}=Contrib{2}*1.25;

77... Выполнение повторяющихся вычислений When Qtr =3 Qtr3=Qtr3*1.25; data charity(drop=Qtr); set prog2.donate; array Contrib{4} Qtr1 Qtr2 Qtr3 Qtr4; do Qtr=1 to 4; Contrib{Qtr}=Contrib{Qtr}*1.25; end; run; Contrib{3}=Contrib{3}*1.25;

78... Выполнение повторяющихся вычислений When Qtr =4 Qtr4=Qtr4*1.25; data charity(drop=Qtr); set prog2.donate; array Contrib{4} Qtr1 Qtr2 Qtr3 Qtr4; do Qtr=1 to 4; Contrib{Qtr}=Contrib{Qtr}*1.25; end; run; Contrib{4}=Contrib{4}*1.25;

79 Выполнение повторяющихся вычислений PROC PRINT Output PROC PRINT Output ID Qtr1 Qtr2 Qtr3 Qtr4 E E E E E proc print data=charity noobs; run;

Раздел 10.3 Применение SAS массивов

81 Цели Использовать SAS массив, чтобы создать новые переменные. Использовать SAS массив, чтобы создать новые переменные. Использовать SAS массив, чтобы выполнить поиск по таблице. Использовать SAS массив, чтобы выполнить поиск по таблице. Использовать SAS массив, чтобы выполнить «вращение» SAS набора данных. Использовать SAS массив, чтобы выполнить «вращение» SAS набора данных.

82 Создание переменных Подсчитать и отобразить процент от общей суммы, которую каждый сотрудник выплачивает в каждом квартале. Значение процента вычислить только из выплат сотрудника, игнорируя вложения компании. Partial Listing of prog2. donate ID Qtr1 Qtr2 Qtr3 Qtr4 E E

83 Создание переменных data percent(drop=Qtr); set prog2.donate; Total=sum(of Qtr1-Qtr4); array Contrib{4} Qtr1-Qtr4; array Percent{4}; do Qtr=1 to 4; Percent{Qtr}=Contrib{Qtr}/Total; end; run; Второй оператор ARRAY создает четыре числовые переменные: Percent1, Percent2, Percent3 и Percent4.

84 Создание переменных ID Percent1 Percent2 Percent3 Percent4 E % 49% 33%. E % 31% 26% 20% E % 37% 37% E % 20% 32% 31% E % 42% 32% 5% proc print data=percent noobs; var ID Percent1-Percent4; format Percent1-Percent4 percent6.; run; PROC PRINT Output

85... Создание переменных Вычислить разницу между поквартальными выплатами сотрудников. Listing of prog2. donate ID Qtr1 Qtr2 Qtr3 Qtr4 E E Первая разница Вторая разница Третья разница

86 Создание переменных data change(drop=i); set prog2.donate; array Contrib{4} Qtr1-Qtr4; array Diff{3}; do i=1 to 3; Diff{i}=Contrib{i+1}-Contrib{i}; end; run;

87... Создание переменных When i =1 Diff1=Qtr2-Qtr1; data change(drop=i); set prog2.donate; array Contrib{4} Qtr1-Qtr4; array Diff{3}; do i=1 to 3; Diff{i}=Contrib{i+1}-Contrib{i}; end; run; Diff{1}=Contrib{2}-Contrib{1};

88... Создание переменных When i =2 Diff2=Qtr3-Qtr2; data change(drop=i); set prog2.donate; array Contrib{4} Qtr1-Qtr4; array Diff{3}; do i=1 to 3; Diff{i}=Contrib{i+1}-Contrib{i}; end; run; Diff{2}=Contrib{3}-Contrib{2};

89... Создание переменных When i =3 Diff3=Qtr4-Qtr3; data change(drop=i); set prog2.donate; array Contrib{4} Qtr1-Qtr4; array Diff{3}; do i=1 to 3; Diff{i}=Contrib{i+1}-Contrib{i}; end; run; Diff{3}=Contrib{4}-Contrib{3};

90 Создание переменных ID Diff1 Diff2 Diff3 E E E E E proc print data=change noobs; var ID Diff1-Diff3; run; PROC PRINT Output

91 Назначение исходных данных Определить разницу между текущими выплатами сотрудника и средними значениями за предыдущий год: $10, $15, $5 и $10. data compare(drop=Qtr Goal1-Goal4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; array Diff{4}; array Goal{4} Goal1-Goal4 (10,15,5,10); do Qtr=1 to 4; Diff{Qtr}=Contrib{Qtr}-Goal{Qtr}; end; run;

92 Назначение исходных данных ID Diff1 Diff2 Diff3 Diff4 E E E E E proc print data=compare noobs; var ID Diff1 Diff2 Diff3 Diff4; run; PROC PRINT Output

93... data compare(drop=Qtr Goal1-Goal4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; array Diff{4}; array Goal{4} Goal1-Goal4 (10,15,5,10); do Qtr=1 to 4; Diff{Qtr}=Contrib{Qtr}- Goal{Qtr}; end; run; ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2. donate PDV Компиляция

94... data compare(drop=Qtr Goal1-Goal4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; array Diff{4}; array Goal{4} Goal1-Goal4 (10,15,5,10); do Qtr=1 to 4; Diff{Qtr}=Contrib{Qtr}- Goal{Qtr}; end; run; IDQTR3QTR1QTR2QTR4 PDV ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2.donate

95... data compare(drop=Qtr Goal1-Goal4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; array Diff{4}; array Goal{4} Goal1-Goal4 (10,15,5,10); do Qtr=1 to 4; Diff{Qtr}=Contrib{Qtr}- Goal{Qtr}; end; run; IDQTR3QTR1QTR2DIFF1DIFF2QTR4 PDV DIFF3DIFF4 ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2.donate

96... data compare(drop=Qtr Goal1-Goal4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; array Diff{4}; array Goal{4} Goal1-Goal4 (10,15,5,10); do Qtr=1 to 4; Diff{Qtr}=Contrib{Qtr}- Goal{Qtr}; end; run; IDQTR3QTR1QTR2DIFF1DIFF2QTR4 PDV DIFF3DIFF4GOAL2GOAL1GOAL4GOAL3 ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2.donate

97... data compare(drop=Qtr Goal1-Goal4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; array Diff{4}; array Goal{4} Goal1-Goal4 (10,15,5,10); do Qtr=1 to 4; Diff{Qtr}=Contrib{Qtr}- Goal{Qtr}; end; run; IDQTR3QTR1QTR2DIFF1DIFF2QTR4 PDV DIFF3GOAL2DIFF4GOAL1GOAL4QTRGOAL3 ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2.donate

98... data compare(drop=Qtr Goal1-Goal4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; array Diff{4}; array Goal{4} Goal1-Goal4 (10,15,5,10); do Qtr=1 to 4; Diff{Qtr}=Contrib{Qtr}- Goal{Qtr}; end; run; IDQTR3QTR1QTR2DIFF1DIFF2QTR4 PDV DIFF3GOAL2DIFF4GOAL1GOAL4QTRGOAL3 DDDD D ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2.donate

99 Выполнение поиска по таблице Когда вы создаете массив, чтобы описать временные элементы массива, то вы можете использовать ключевое слово _TEMPORARY_ вместо указания имен переменных. data compare(drop=Qtr); set prog2.donate; array Contrib{4} Qtr1-Qtr4; array Diff{4}; array Goal{4} _temporary_ (10,15,5,10); do Qtr=1 to 4; Diff{Qtr}=Contrib{Qtr}-Goal{Qtr}; end; run;

100 Выполнение поиска по таблице ID Diff1 Diff2 Diff3 Diff4 E E E E E proc print data=compare noobs; var ID Diff1 Diff2 Diff3 Diff4; run; PROC PRINT Output

101 Вращение SAS набора ID Qtr1 Qtr2 Qtr3 Qtr4 E E Вращение, или транспонирование, SAS набора может быть выполнено с помощью обработки массива. Когда набор данных вращается, значения из наблюдения во входном наборе становятся значениями переменной в выходном наборе данных.

ID Qtr Amount Partial Listing of rotate ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2. donate E E E E E E E E Вращение SAS набора

103 Вращение SAS набора data rotate(drop=Qtr1-Qtr4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; do Qtr=1 to 4; Amount=Contrib{Qtr}; output; end; run;

104 IDQTR3QTR1QTR2QTRAMOUNTQTR4 DDDD ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2. donate ID Qtr Amount Partial Listing of rotate data rotate(drop=Qtr1-Qtr4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; do Qtr=1 to 4; Amount=Contrib{Qtr}; output; end; run; Выполнение... PDV

105 data rotate(drop=Qtr1-Qtr4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; do Qtr=1 to 4; Amount=Contrib{Qtr}; output; end; run; IDQTR3QTR1QTR2QTRAMOUNTQTR4 DDDD Инициализация PDV.... PDV ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2. donate ID Qtr Amount Partial Listing of rotate

data rotate(drop=Qtr1-Qtr4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; do Qtr=1 to 4; Amount=Contrib{Qtr}; output; end; run; E00224 IDQTR3QTR1QTR2QTRAMOUNTQTR4 DDDD PDV ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2. donate ID Qtr Amount Partial Listing of rotate

107 data rotate(drop=Qtr1-Qtr4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; do Qtr=1 to 4; Amount=Contrib{Qtr}; output; end; run; E00224 IDQTR3QTR1QTR2QTRAMOUNTQTR4 DDDD ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2.donate... PDV ID Qtr Amount Partial Listing of rotate

data rotate(drop=Qtr1-Qtr4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; do Qtr=1 to 4; Amount=Contrib{Qtr}; output; end; run; E00224 IDQTR3QTR1QTR2QTRAMOUNTQTR4 DDDD PDV ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2. donate ID Qtr Amount Partial Listing of rotate

data rotate(drop=Qtr1-Qtr4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; do Qtr=1 to 4; Amount=Contrib{Qtr}; output; end; run; E00224 IDQTR3QTR1QTR2QTRAMOUNTQTR4 DDD Amount=Contrib{1}; D 12 PDV ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2. donate ID Qtr Amount Partial Listing of rotate

Запись наблюдения в rotate. data rotate(drop=Qtr1-Qtr4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; do Qtr=1 to 4; Amount=Contrib{Qtr}; output; end; run; E00224 IDQTR3QTR1QTR2QTRAMOUNTQTR4 DDDD PDV ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2. donate ID Qtr Amount E Partial Listing of rotate

data rotate(drop=Qtr1-Qtr4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; do Qtr=1 to 4; Amount=Contrib{Qtr}; output; end; run; E00224 IDQTR3QTR1QTR2QTRAMOUNTQTR4 DD Amount=Contrib{2}; DD 33 PDV ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2. donate ID Qtr Amount E Partial Listing of rotate

Запись наблюдения в rotate. data rotate(drop=Qtr1-Qtr4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; do Qtr=1 to 4; Amount=Contrib{Qtr}; output; end; run; E00224 IDQTR3QTR1QTR2QTRAMOUNTQTR4 DDDD PDV ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2. donate ID Qtr Amount E E Partial Listing of rotate

data rotate(drop=Qtr1-Qtr4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; do Qtr=1 to 4; Amount=Contrib{Qtr}; output; end; run; E00224 IDQTR3QTR1QTR2QTRAMOUNTQTR4 D Amount=Contrib{3}; DDD 22 PDV ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2. donate ID Qtr Amount E E Partial Listing of rotate

Запись наблюдения в rotate. data rotate(drop=Qtr1-Qtr4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; do Qtr=1 to 4; Amount=Contrib{Qtr}; output; end; run; E00224 IDQTR3QTR1QTR2QTRAMOUNTQTR4 DDDD PDV ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2. donate ID Qtr Amount E E E Partial Listing of rotate

data rotate(drop=Qtr1-Qtr4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; do Qtr=1 to 4; Amount=Contrib{Qtr}; output; end; run; E00224 IDQTR3QTR1QTR2QTRAMOUNTQTR4 Amount=Contrib{4}; DDDD. PDV ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2. donate ID Qtr Amount E E E Partial Listing of rotate

116 Запись наблюдения в rotate. data rotate(drop=Qtr1-Qtr4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; do Qtr=1 to 4; Amount=Contrib{Qtr}; output; end; run; E00224 IDQTR3QTR1QTR2QTRAMOUNTQTR4 DDDD... PDV ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2. donate ID Qtr Amount E E E E Partial Listing of rotate

PDV E00224 IDQTR3QTR1QTR2QTRAMOUNTQTR4 DDDD data rotate(drop=Qtr1-Qtr4); set prog2.donate; array Contrib{4} Qtr1-Qtr4; do Qtr=1 to 4; Amount=Contrib{Qtr}; output; end; run; Неявный возврат. Продолжается обработка наблюдений из prog2.donate. ID Qtr1 Qtr2 Qtr3 Qtr4 E E Partial Listing of prog2. donate ID Qtr Amount E E E E Partial Listing of rotate

118 Вращение SAS набора PROC PRINT Output proc print data=rotate noobs; run; ID Qtr Amount E E E E E E E E