Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 8 лет назад пользователемСергей Калиновский
1 Глава 10 Циклическая обработка данных
2 Раздел 10.1 Использование цикла типа DO
3 3 Цели Изучить цикл DO. Изучить цикл DO. Использовать DO Loop для создания данных. Использовать DO Loop для создания данных. Использовать DO Loop для устранения избыточности программного кода. Использовать DO Loop для устранения избыточности программного кода. Использовать DO Loop для условной обработки существующего кода. Использовать DO Loop для условной обработки существующего кода.
4 4 Работа цикла DO Операторы внутри цикла DO выполняются определенное количество итераций или до тех пор, пока отдельное условие не остановит цикл. DATA statement SAS statements DO statement iterated SAS statements END statement SAS statements RUN statement
5 5 Работа цикла DO Цикл DO можно использовать для того, чтобы выполнять многократные вычисления выполнять многократные вычисления создавать данные создавать данные устранять избыточность программного кода устранять избыточность программного кода выполнять условную обработку SAS кода. выполнять условную обработку SAS кода.
6 6 Повторяющееся кодирование data compound; Amount=50000; Rate=.075; Yearly=Amount*Rate; Quarterly+((Quarterly+Amount)*Rate/4); run;
7 7 Повторяющееся кодирование proc print data=compound noobs; run; Amount Rate Yearly Quarterly Задача: вычислить долю прибыли за 20 лет (т.е. за 80 кварталов). PROC PRINT Output
8 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 9 Итеративный оператор DO выполняет команды цикла DO и END повторно, на основе значений индексной переменной. specification-1…specification-n может быть диапазон значений или перечень определенных значений. Синтаксис структуры DO DO index-variable=specification-1 ; END;
10 10 Синтаксис структуры DO: где start – начальное значение start – начальное значение stop – конечное значение stop – конечное значение increment – шаг изменения. increment – шаг изменения. Синтаксис структуры DO DO index-variable=start TO stop ;
11 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 12 Синтаксис структуры DO item-1... item-n могут быть либо числовыми, либо символьными константами, или они все могут быть переменными. Цикл DO выполняется один раз для каждого значения в списке. DO index-variable=item-1 ;
13 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 14 Выполнение повторяющихся вычислений Каждый год 1 января на счет поступает $5,000. Определить, какая сумма будет на счету через три года, учитывая при этом ставку 7.5 процента. data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run;
15 15 data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; Выполнение YEARCAPITAL _N_ D... PDV
16 16 YEAR. CAPITAL 0 _N_ 1 D... Переинициализация PDV. data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; PDV
17 17 YEAR 2001 CAPITAL 0 _N_ 1... data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; D PDV
18 18 YEAR 2001 CAPITAL 5000 _N_ 1... data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; D PDV
19 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 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 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 22 YEAR 2002 CAPITAL _N_ 1 data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run;... D PDV
23 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 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 25... YEAR 2003 CAPITAL _N_ 1 data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; D PDV Значение Year вышло из диапазона?
26 26 YEAR 2003 CAPITAL _N_ 1 data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run;... D PDV
27 27... YEAR 2003 CAPITAL data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; _N_ ( *.075) D PDV
28 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 29... YEAR 2004 CAPITAL _N_ 1 data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; D PDV Значение Year вышло из диапазона?
30 30... YEAR 2004 CAPITAL _N_ 1 data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; D PDV
31 31... PDV Запись наблюдения в invest. YEAR 2004 CAPITAL _N_ 1 data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); end; run; Неявный вывод D
32 32 Выполнение повторяющихся вычислений Year Capital proc print data=invest noobs; run; PROC PRINT Output
33 33 Выполнение повторяющихся вычислений data invest; do Year=2001 to 2003; Capital+5000; Capital+(Capital*.075); output; end; run; proc print data=invest noobs; run; Создать отдельные наблюдения для каждого года.
34 34 Выполнение повторяющихся вычислений Year Capital PROC PRINT Output Почему значение переменной Year в последней записи не равно 2004?
35 35 Устранение избыточности кода Задача: прогноз роста количества сотрудников различных подразделений авиакомпании. Partial Listing of prog2. growth Num Division Emps Increase APTOPS FINACE FLTOPS
36 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 37 Устранение избыточности кода Используйте цикл DO, чтобы исключить чрезмерный код из предыдущей задачи. data forecast; set prog2.growth(rename=(NumEmps=NewTotal)); do Year=1 to 3; NewTotal=NewTotal*(1+Increase); output; end; run;
38 38 Устранение избыточности кода proc print data=forecast noobs; run; PROC PRINT Output New Division Total Increase Year APTOPS APTOPS APTOPS FINACE
39 39 Задание итеративной обработки Чтобы остановить работу цикла, вы можете использовать операторы DO WHILE и DO UNTIL. Во избежание зацикливания убедитесь, что определенное условие встречается в программе.
40 40 Синтаксис команды DO WHILE: Операторы цикла никогда не выполняются, если expression первоначально является ложным. Оператор DO WHILE DO WHILE (expression); END;
41 41 Оператор DO UNTIL Синтаксис команды DO UNTIL: Операторы внутри цикла выполняются, по меньшей мере, один раз. DO UNTIL (expression); END;
42 42 Задание итеративной обработки Определить количество лет, которые понадобятся, чтобы счет достиг суммы $1,000,000, если сумма $5,000 ежегодно инвестируется на 7.5 процентов.
43 43 Задание итеративной обработки data invest; do until(Capital> ); Year+1; Capital+5000; Capital+(Capital*.075); end; run; proc print data=invest noobs; run;
44 44 Задание итеративной обработки PROC PRINT Output Capital Year
45 45 Итеративный оператор DO с условным предложением Вы можете комбинировать операторы DO WHILE и DO UNTIL с итеративным оператором DO. Это один из методов избежать зацикливания команд DO WHILE или DO UNTIL. DO index-variable=start TO stop WHILE | UNTIL (expression); END;
46 46 Итеративный оператор DO с условным предложением Закрыть счет через 25 лет или, если сумма на счету достигла $250,000.
47 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 48 Итеративный оператор DO с условным предложением PROC PRINT Output Year Capital
49 49 Вложенный цикл Вложенный цикл DO – это цикл внутри цикла. Кода вы работаете с вложенными циклами DO, используйте разные индексные переменные для каждого цикла используйте разные индексные переменные для каждого цикла проверяйте, что каждый оператор DO закрывается соответствующим оператором END. проверяйте, что каждый оператор DO закрывается соответствующим оператором END.
50 50 Вложенный цикл Создать одно наблюдение на год за пять лет и показать прибыль, если вы вложили $5,000 под годовой процент 7.5, начисляемый каждый квартал.
51 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 52 PROC PRINT Output Вложенный цикл Year Capital
53 53 Вложенный цикл Сравните результаты инвестиций $5,000 в год на пять лет в три различных банка, с начислением процентов поквартально. Каждый банк имеет фиксированную процентную ставку. prog2. Banks Name Rate Calhoun Bank and Trust State Savings Bank National Savings and Trust
54 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 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 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 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 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;
59 Раздел 10.2 Обработка SAS массива
60 60 Цели Изучить понятие SAS массивы. Изучить понятие SAS массивы. Использовать SAS массивы для выполнения повторяющихся вычислений. Использовать SAS массивы для выполнения повторяющихся вычислений.
61 61 Выполнение повторяющихся вычислений Сотрудники компании каждый квартал перечисляют некоторую сумму на благотворительность. Набор данных prog2. donate содержит размер взноса каждого сотрудника. Компания дополнительно добавляет по 25 процентов. Вычислить взнос каждого сотрудника, включая дополнительную сумму от компании. Partial Listing of prog2. donate ID Qtr1 Qtr2 Qtr3 Qtr4 E E
62 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 63 PROC PRINT Output Задача: подобным образом модифицировать данные за 52 недели, которые хранятся в наборах с Week1 по Week52. Выполнение повторяющихся вычислений ID Qtr1 Qtr2 Qtr3 Qtr4 E E E E E
64 64 Обработка массива Вы можете использовать массив, чтобы упростить программный код, который выполняет повторяющиеся вычисления выполняет повторяющиеся вычисления создает новые переменные с одинаковыми атрибутами создает новые переменные с одинаковыми атрибутами считывает данные считывает данные изменяет SAS наборы данных, перемещая переменные в наблюдения, а наблюдения – в переменные изменяет SAS наборы данных, перемещая переменные в наблюдения, а наблюдения – в переменные сравнивает переменные сравнивает переменные выполняет поиск по таблице. выполняет поиск по таблице.
65 65 Массивы в SAS Массив SAS это временный набор SAS переменных, сгруппированных в определенном порядке это временный набор SAS переменных, сгруппированных в определенном порядке отождествляется по имени массива отождествляется по имени массива существует только во время выполнения текущего шага данных существует только во время выполнения текущего шага данных это не переменная. это не переменная.
66 66 Массивы в SAS Каждое значение в массиве называется элемент называется элемент указывается с помощью списка элементов, который определяет позицию элемента в массиве. указывается с помощью списка элементов, который определяет позицию элемента в массиве. Когда вы используете ссылку на массив, то соответствующее значение подставляется для этого обращения.
67 67... Массивы в SAS D IDQTR4QTR2QTR3QTR1 Первый элемент Второй элемент Третий элемент Четвертый элемент Ссылки на массив CONTRIB{1}CONTRIB{2}CONTRIB{3}CONTRIB{4} CONTRIB Имя массива
68 68 Оператор ARRAY Оператор ARRAY определяет элементы массива. Эти элементы будут обрабатываться как единая группа. Вы ссылаетесь на элементы массива по имени массива и индекса. ARRAY array-name {subscript} ;
69 69 Оператор ARRAY должен содержать либо только числовые, либо символьные элементы должен содержать либо только числовые, либо символьные элементы должен использоваться для описания массива до того, как осуществляет ссылка на имя массива должен использоваться для описания массива до того, как осуществляет ссылка на имя массива создает переменные, если они еще не существуют в PDV создает переменные, если они еще не существуют в PDV это оператор, выполняемый в процессе компиляции. это оператор, выполняемый в процессе компиляции.
70 70... Определение массива Оператор ARRAY, который описывает четыре переменные (поквартальные взносы), как элементы массива. array Contrib{4} Qtr1 Qtr2 Qtr3 Qtr4; Первый элемент Второй элемент Третий элемент Четвертый элемент IDQTR4QTR2QTR3QTR1 CONTRIB
71 71... Определение массива Переменные, которые являются элементами массива, могут не иметь похожие, пронумерованные или связанные имена. array Contrib2{4} Q1 Qrtr2 ThrdQ Qtr4; QTR4QRTR2THRDQQ1 CONTRIB2 Первый элемент Второй элемент Третий элемент Четвертый элемент ID
72 72 Обработка массива Циклы DO часто используются для обработки каждого элемента массива. Синтаксис итеративного цикла DO имеет следующий вид: Чтобы выполнить цикл столько раз, сколько элементов в массиве, укажите диапазон значений индексной переменной от 1 до количество-элементов-массива. DO index-variable=1 TO number-of-elements-in-array; additional SAS statements using array-name{index-variable}… END;
73 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 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 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 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 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 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 79 Выполнение повторяющихся вычислений PROC PRINT Output PROC PRINT Output ID Qtr1 Qtr2 Qtr3 Qtr4 E E E E E proc print data=charity noobs; run;
80 Раздел 10.3 Применение SAS массивов
81 81 Цели Использовать SAS массив, чтобы создать новые переменные. Использовать SAS массив, чтобы создать новые переменные. Использовать SAS массив, чтобы выполнить поиск по таблице. Использовать SAS массив, чтобы выполнить поиск по таблице. Использовать SAS массив, чтобы выполнить «вращение» SAS набора данных. Использовать SAS массив, чтобы выполнить «вращение» SAS набора данных.
82 82 Создание переменных Подсчитать и отобразить процент от общей суммы, которую каждый сотрудник выплачивает в каждом квартале. Значение процента вычислить только из выплат сотрудника, игнорируя вложения компании. Partial Listing of prog2. donate ID Qtr1 Qtr2 Qtr3 Qtr4 E E
83 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 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 85... Создание переменных Вычислить разницу между поквартальными выплатами сотрудников. Listing of prog2. donate ID Qtr1 Qtr2 Qtr3 Qtr4 E E Первая разница Вторая разница Третья разница
86 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 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 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 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 90 Создание переменных ID Diff1 Diff2 Diff3 E E E E E proc print data=change noobs; var ID Diff1-Diff3; run; PROC PRINT Output
91 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 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 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 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 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 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 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 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 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 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 101 Вращение SAS набора ID Qtr1 Qtr2 Qtr3 Qtr4 E E Вращение, или транспонирование, SAS набора может быть выполнено с помощью обработки массива. Когда набор данных вращается, значения из наблюдения во входном наборе становятся значениями переменной в выходном наборе данных.
102 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 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 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 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
106 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 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
108 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
109 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
110 Запись наблюдения в 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
111 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
112 Запись наблюдения в 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
113 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
114 Запись наблюдения в 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
115 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 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
117 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 118 Вращение SAS набора PROC PRINT Output proc print data=rotate noobs; run; ID Qtr Amount E E E E E E E E
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.