Файл «SAS BASE. Программирование на языке SAS BASE. Основы» внутри архива находится в папке «Лекции 2013». PDF-файл из архива «Лекции 2013″, который расположен в категории » «. Всё это находится в предмете «(ппп соиад) (sas) пакеты прикладных программ для статистической обработки и анализа данных» из 10 семестр (2 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова.
Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 5 страницы из PDF
до шага DATA, где используется!Теперь можно создать макроопределение:%macro readall;%do i=1 %to &tabnobs;_no= set table(keep=c1) point=_no;row%end;%mend;data transposed2;%readalldrop c1;output;stop;run;data transposed1;_no=1;set table(keep=c1)point=_no;row1 = c1;_no=2;set table(keep=c1)point=_no;row2 = c1;drop c1;output;stop;run;70Программа с макросами для транспонирования таблицы%macro readall(j);%do i=1 %to &tabnobs;_no= set table(keep=crowj;%end;drop c%mend;%macro doallcols;%do j=1 %to 4;%readall(%end;%mend;data transposed2;%doallcolsstop;run;Как будет работать программа (шаг DATA) после компиляции макросов?Мы 4 раза вызываем макрос readallj, читающий данные из однойзаданной колонки исходной таблицы в новое наблюдение длятранспонированной таблицы.В какую программу «развернутся» эти два макроопределения? Этоможно реконструировать из log:1 data transposed2;2_no= 1;3set table(keep=c1)4row1 = c1;5_no= 2;6set table(keep=c1)7row2 = c1;8drop c1;9output;10_no= 1;11set table(keep=c2)12row1 = c2;13_no= 2;14set table(keep=c2)15row2 = c2;16drop c2;17output;18_no= 1;19set table(keep=c3)20row1 = c3;21_no= 2;22set table(keep=c3)23row2 = c3;24drop c3;25output;26_no= 1;27set table(keep=c4)28row1 = c4;29_no= 2;30set table(keep=c4)31row2 = c4;32drop c4;33output;34 stop;35 run;point=_no;point=_no;point=_no;point=_no;point=_no;point=_no;point=_no;point=_no;71Особенности макропроцессораСоздание 500000 макропеременных (не пытайтесь повторить это дома)data _null_;i=1;do while (i<=500000);call symputx(‘var’||put(i,Z6.),put(i,Z6.));i+1;,секend;run;Механизм хранениямакропеременных – медленныйпри большом размере хранимыхмакропеременных,не пользуйтесь им для хранениябольших объемов данных.(пользуйтесь наборами данных)Число макропеременныхДля более тонкой настройкиСм. option msymtabmax: Once the maximum value is reached, additional macro variables arewritten out to disk.72%include (не работает в on-demand)• Вы можете “подставлять” в сеанс файлы с кодом SAS, и выполнять этоткод.
основы программирования в SAS 9.3 (Statistical Analysis System)
Условие – чтобы файловая система с подставляемыми файламинаходилась на том же сервере, где установлен SAS.%include ‘c:/workshop/myprogram.sas’;• Чтобы отлаживать этот оператор на разных уровнях вложенности, естьспециальная опция:%INCLUDE ‘c:/workshop/myprogram.sas’ /SOURCE2;Если эта опция включена, в log появляется код, который подставляется изуказанного файла и выполняется.73Пользовательские процедуры (FCMP)• Вы можете создавать собственные функции и подпрограммы (callroutines). Их можно использовать в разных шагах SAS (DATA, PROC SQL, впроцедурах SAS/OR (задачи оптимизации), SAS/STAT).• Особенность этого подхода — наличие централизованного хранилищапроцедур и функций (хотя у макросов тоже есть возможность сохранитьскомпилированный код в каталог и пользоваться им коллективно).Причем можно разделять «области видимости» функций.• Использует синтаксис, похожий на шаг DATA (но! со своимиособенностями)74Примерproc fcmp outlib=work.fun1.fun1;subroutine plus1(ind);outargs ind;ind=ind+1;endsub;Work.fun1 – это название набора данных, куда будутзаписаны (в специальной форме) функция иподпрограммаПодпрограмма plus1 (один входной аргументчислового типа,Тот же аргумент будет возвращен из подпрограммы –явно указываем с помощью outargs)endsub; после каждой функции/подпрограммыfunction myfactor(x);if (x=1) then return (1);Напишем свою функцию, вычисляющую факториал.else return (x*myfactor(x-1));Функция принимает и возвращает число.endsub;Return () – инструкция, которая возвращает результат иquit;options cmplib=work.fun1;data test;n=14;call plus1(n);f15=myfactor(n);f15a=fact(n);run;выходит из функции.Опция сmplib – где (и в каком порядке) будетпроизводиться поиск пользовательских функцийПосле вызова call, n=15Fact = это встроенная функция.75Пример 2 (Mandelbrot set plot)*proc fcmp outlib=work.funcs.temp ;function mnd (x0,y0); *returns color;/*For each pixel on the screen do:x0 = scaled x coordinate of pixel (must be scaled to lie somewhere in the mandelbrot X scale (-2.5, 1)y0 = scaled y coordinate of pixel (must be scaled to lie somewhere in the mandelbrot Y scale (-1, 1)*/x = 0;y = 0;iteration = 0;max_iteration = 1000;do while ( (x*x + y*y < 2*2) AND (iteration < max_iteration) );xtemp = x*x — y*y + x0;y = 2*x*y + y0;x = xtemp;iteration = iteration + 1;end;return(iteration);endsub;run;options cmplib=work.funcs.temp;data plotted;do x=-2.5 to 1 by 0.01;do y=-1 to 1 by 0.01;col=mnd(x,y);output;end;end;run;PROC GCONTOUR DATA = plotted;PLOT y * x = col /PATTERN;run;quit;* From wikipedia.76Просмотр своих функций и их отладка•Просмотр кода функции (если он не зашифрован)options cmplib=work.fun1;proc fcmpoutlib=work.fun1.fun1;listfunc myfactor;listfunc plus1;run;•Отладка функции – пользуемся log из функции.function myfactor(x);put x=;if (x=1) then return (1);else return (x*myfactor(x-1));endsub;•Отладка функции – ещё один способ (см. окно Results-Listing, виден стеквызовов)proc fcmp outlib=work.fun1.fun1 TRACE ;function myfactor(x);if (x=1) then return (1);else return (x*myfactor(x-1));endsub;a=myfactor(15);Можно вызыватьput a=;run;функции прямо из proc fcmp77Процедура SQL• В SAS можно управлять структурой наборов данных с помощью языказапроса SQL.• SQL и шаг DATA дополняют друг друга.
What is Base SAS ?
Подумайте, чем можно проще иэффективнее решать вашу задачу.• Справка: SAS® 9.3 SQL Procedure User’s Guide• Совместимость: PROC SQL follows most of the guidelines set by the American NationalStandards Institute (ANSI) in its implementation of SQL. However, it is not fully compliant withthe current ANSI standard for SQL. The SQL research project at SAS has focused primarily on theexpressive power of SQL as a query language.
Consequently, some of the database features ofSQL have not yet been implemented in PROC SQL.• В общем, это ещё один способ работать с наборами данных SAS.• Синтаксис:proc sql <опции>;quit;78Создание таблицы и её вывод в отчет•Select выводит результаты SQL-запроса в отчет:proc sql;select * from ecsql1.qtr1_2007;quit;•Create table создаёт набор данных:proc sql;create table table1 asselect t1.order_id, t1.customer_id, t1.order_typefrom ecsql1.qtr1_2007 as t1where t1.order_type=2;quit;Избранные опции к proc sql:proc sql outobs=10;WARNING: Statement terminated early due to OUTOBS=10 option.proc sql inobs=10;19select * from ecsql1.qtr1_2007;WARNING: Only 10 records were read from ECSQL1.QTR1_2007 due to INOBS= option.proc sql noexec;NOTE: Statement not executed due to NOEXEC option.proc sql _method _tree;(информация от планировщика, официально не документировано, см. Paper CS-11The SQL Optimizer Project: _Method and _Tree in SAS®9.1, Russ Lavery)79Объединение таблиц•«По горизонтали»proc sql;select * from ecsql1.qtr1_2007 as t1, ecsql1.customer as t2where t1.customer_id = t2.customer_id;quit;proc sql;select * from ecsql1.qtr1_2007 as t1 join ecsql1.customer as t2on t1.customer_id = t2.customer_id;quit;•«По вертикали», причем в новой таблице будут все переменные из входящихтаблиц (независимо от того, есть ли они сразу в обеих таблицах)proc sql;create table qtr12 asselect * from ecsql1.qtr1_2007outer union corrselect * from ecsql1.qtr2_2007;quit;См.
Combining Queries with Set Operators80Использование функций SAS• В SQL-запросах можно использовать встроенные и пользовательскиефункции.proc fcmp outlib=work.fun1.fun1;function myfun(id) $ 4;str_id=put(id,10.);return(substr(str_id,1,4));endsub;run;options cmplib=work.fun1.fun1;proc sql;select order_id, myfun(order_id) as first_4_lett fromecsql1.qtr1_2007 ;quit;81Сведение данных• Подсчет агрегатовproc sql;select order_type, avg(quantity) format=3.1 label=»Среднее!»,sum(total_retail_price) format=dollar10. label=»это сумма»from ecsql1.order_factgroup by 1; *possible in group by, order by;quit;• Having: фильтрация по агрегатам:proc sql;select order_type, count(distinct customer_id), sum(total_retail_price)from ecsql1.order_factgroup by order_typehaving sum(total_retail_price) > 30000;quit;• Calculated: Операции с агрегатамиproc sql;select order_type, count(distinct customer_id) as people,sum(total_retail_price) as summ,calculated summ/calculated people as ratiofrom ecsql1.order_factgroup by order_type;quit;82Сведение данных. Remerge.• Эта особенность SAS SQL помогает сводить исходные данные и агрегатыбез вложенных запросов.• Задача: найти людей, которые имеют максимальную зарплату (salary) всвоей группе (gender).• Обычный SQL: с помощью вложенных запросовproc sql;select gender,salary from ecsql1.sales as t1,(select gender, max(salary) as maxsalaryfrom ecsql1.salesgroup by gender) as t2where t1.gender=t2.gender and t1.salary = t2.maxsalary;quit;• SAS SQL:proc sql;proc sql;select gender, salaryselect gender, salary,from ecsql1.salesmax(salary) as msgroup by genderfrom ecsql1.saleshaving salary = max(salary);group by genderquit;having ms=salary;quit;NOTE: The query requires remerging summary statistics back with the original83data.Использование макропеременных•С точки зрения макропроцессора, Proc SQL – обычная процедура, поэтомуподстановка макропеременных происходит без проблем:%let stat=min;proc sql;select * from ecsql1.salesgroup by genderhaving salary=quit;•В proc sql вы можете создавать макропеременные:proc sql;select avg(salary) into :macro_salfrom ecsql1.sales;quit;%put macro_sal=•И несколько макропеременных (много трюков, см. справку по INTO Clause):proc sql;select avg(salary),gender into :macro_sal1-:macro_sal2,:macro_gen1-:macro_gen2from ecsql1.salesgroup by gender;quit;%put macro_sal=macro_gen1;%put macro_sal=macro_gen2;84Использование макроопределенийoptions mprint mlogic symbolgen;%MACRO QTR12;proc sql;%do i=1 %to 2;select * from ecsql1.qtr%end;quit;%MEND;%QTR12MLOGIC(QTR12): Beginning execution.MPRINT(QTR12):proc sql;MLOGIC(QTR12): %DO loop beginning; index variable I; start value is 1; stop value is 2; byvalue is 1.SYMBOLGEN: Macro variable I resolves to 1MPRINT(QTR12):select * from ecsql1.qtr1_2007;MLOGIC(QTR12): %DO loop index variable I is now 2; loop will iterate again.SYMBOLGEN: Macro variable I resolves to 2MPRINT(QTR12):select * from ecsql1.qtr2_2007;MLOGIC(QTR12): %DO loop index variable I is now 3; loop will not iterate again.MPRINT(QTR12):quit;NOTE: PROCEDURE SQL used (Total process time):real time0.05 seconds. . .MLOGIC(QTR12): Ending execution.85Задания1) В библиотеке ECPRG1 находятся наборы данныхEMPS2008, EMPS2009, EMPS2010. С помощью макросов иSQL произведите слияние этих наборов данных повертикали. (таблицы называются почти одинаково, адиапазон требуемых годов мы хотим менять)2) В той же библиотеке есть набор данныхLOOKUP_COUNTRY. Создать функцию, которая из столбцовLABEL и START сформирует строку типа “Andorra – AD“ (т.е.просто вставляет между ними дефис). Примените этуфункцию в SQL-запросе, который печатает таблицу вотчет.86Задания3) Пусть у нас есть таблица с произвольным числом числовых столбцов (соднотипными названиями).data wide_table;drop i;array col;do j=1 to 10;do i=1 to 23;col=rand(‘uniform’);end;output;end;run;Напишите программу (последовательность шагов data/proc), которая сама узнаёт, сколько вэтой таблице столбцов с названием “col*”, и создаёт новый набор данных, содержащийсумму этих столбцов.Подсказка: воспользуйтесь служебным представлением sashelp.vcolumnproc print data=sashelp.vcolumn;where libname=»WORK»;run;87.
Источник: studizba.com
Sas base что это за программа
Программирование на языке SAS. Основы.
По своей сути BASE SAS, как программный продукт, предназначен для обработки данных и решает четыре основных задачи: получение данных, управление данными, анализ данных, представление данных. Получение данных – под этим термином будем понимать различные способы приобретения данных – это и непосредственный ввод, и чтение внешних файлов с данными и передача наборов данных из других прикладных программ.
Управление данными – упорядочивание данных их проверка и исправление ошибок, хранение, преобразование и т.д. – все то, что позволяет с ними работать. Анализ данных – построение отчетов, графиков, таблиц, статистическая или иная обработка данных, на основании которой можно принять то или иное решение. Представление данных – отображение (визуализация) результатов анализа.
При работе с данными SAS использует различные типы файлов: • исходные («сырые») данные хранятся в файлах с различными расширениями. Наиболее типичные — *.dat, *.txt, *.csv • программы, создаваемые разработчиком, имеют расширение .SAS; • наборы данных, создаваемые программно — .SAS7BDAT.
Кроме того, SAS позволяет работать с данными других систем по обработке данных (Oracle, Dbase, Exсel и др.) Возможность работать с широким спектром данных позволяет SAS быть в первой десятке производителей программного обеспечения на протяжении всего времени существования компании. Еще одним основанием для успеха SAS на рынке программного обеспечения является возможность работы SAS программ на практически всех известных на данный момент платформах, начиная от мейнфреймов и заканчивая персональными компьютерами. Такая переносимость программ с платформы на платформу обуславливается тем, что 90% программного кода является независимым и только 10% служит для настройки на конкретное аппаратное обеспечение. Основам программирования на языке SAS и посвящена данная книга.
В книге рассказывается, что представляет из себя язык SAS/Base, рассказывается о работе с системой SAS, SAS библиотеках, чтении и записи данных, создании и применении форматов, формирование запросов с помощью процедуры SQL, объединениях наборов данных, статистических процедурах, преобразовании данных с помощью SAS функций.
Издательство – SAS Institute Inc.
Источник: it-ebooks.ru
Программирование на языке SAS BASE Лекция 1. Основы. Звежинский Дмитрий, SAS Russia/CIS [email protected] 1 Замечания об ошибках и опечатках просьба направлять лектору.
Post on 08-Feb-2018
Documents
Программирование на языке SAS BASE
Лекция 1. Основы.
Звежинский Дмитрий, SAS Russia/[email protected]
1Замечания об ошибках и опечатках просьба направлять лектору.
Где взять эти лекции?И примеры программ?
SAS Enterprise guide• Интерфейс для визуального
программирования (в том числе через SAS on-demand)
• Но мы будем в нем программировать вручную (т.е. с помощью кода на языке SAS)
• Enterprise Guide не выполняет код – он отправляет его для выполнения на сервер, где стоит дистрибутив SAS
• В Enterprise Guideвозвращается результат выполнения программы (например, отчет) или журнал с отладочной информацией (например, ошибками).
Инструкции по установке SAS Enterprise guide (в версии on-demand) были даны ранее.
Как написать программу?
• Проект с программой сохраняется на вашем компьютере
• Данные хранятся на удаленном сервере (можно загружать и создавать свои).
• Можно сделать несколько отдельных программ (изображается в виде значка с бегущим человечком) и запускать их по отдельности ( ) или вместе ( ).
SAS on-demand настроен для работы с кодировкой UTF:Будьте аккуратны при работе с многобайтовыми кодировками!
Журнал выполнения (Log)
• Log – средство для отладки и диагностики выполнения программы. Работает для всех процедур SAS.
• Выводит текст запущенной программы и ошибки (если есть). Ошибки подробно описаны, иногда даются предложения по исправлению.
• Даже если ошибок сразу не видно, рекомендуется вдумчиво изучить Log.
Введение. Обзор языка SAS BASE
данных SAS, сторонние форматы)
Набор данных SAS
Структура программы на языке SAS BASE
• Линейная структура программы. Нет циклов, операторов условного перехода.• Разные части программы обмениваются друг с другом данными в виде наборов
данных SAS. Эти части практически не связаны друг с другом.• Основная структура данных – набор данных (SAS data set). Все данные лежат на
жестком диске в виде файлов. Поэтому данных может быть очень много!• Нет инкапсуляции (в смысле сокрытия реализации кода за интерфейсом)• Только две (!) основные синтаксические конструкции:
• Шаг DATA (работа с данными – создание, чтение, добавление, изменение)• Шаг PROC – всё остальное
• Исторически основная цель программы – создание отчета (описание или анализ исходных данных) или запроса к данным (получение «среза» данных).
Наборы данных SAS (datasets)• Наборы данных – обычные «плоские» таблицы
• Переменные (столбцы) – одного из двух типов (числовые )или текстовые ( )
• Для хранения чисел отводится 8 байт. Для хранения текста – от 1 до 32767 байт.
• Названия переменных – до 32 символов: _ a-z 0-9• Регистр в названии переменной не важен• Нельзя начинать название переменной с цифры
Именно наборы данных SAS (либо данные, которые представляются в этом виде) обязаны подаваться на вход процедур (шаг proc)
Каждый столбец имеет набор атрибутов (правый клик мышью на заголовок – > properties), среди них: length (макс. кол-во байт, которые можно хранить в этой переменной для каждого наблюдения), name (название), label (ярлык, текстовое поле, где можно хранить более подробное описание переменной), type (тип), format (формат – правило для отображения данных в отчет или на экран)
Для работы с данными в формате SAS dataset можно применять большой набор собственных алгоритмов, а также стандартный язык запросов (SQL)
Наборы данных SAS (продолжение)• Наборы данных – обычные файлы (*.sas7bdat)
• Можно прозрачным образом подключать данные практически в любом виде (от excel/access до промышленных баз данных) через набор механизмов (engines).
• Импорт данных из большинства популярных форматов (file->import data)
• Можно создавать и редактировать прямо в Enterprise guide (file->new->data)
• Встроенный механизм для многопользовательского доступа (на чтение, с доступом на запись – нужно разбираться отдельно)
• SAS – это НЕ движок для базы данных (не гарантирует транзакционную целостность) и НЕ менеджер для организации хранения данных (разделение доступа, аудит данных и проч.), хотя некоторые возможности для этих целей у него имеются.
Библиотеки• Возникли как подход к централизованному хранению и
прозрачному использованию данных в программах SAS
Самый простой случай библиотеки –это наборы данных, находящиеся в одной директории.
При запуске SAS сразу имеется несколько служебных библиотек, временная библиотека Work (она будет очищена при отключении от сервера или завершении процесса sas.exe) и персональная библиотека Sasuser (данные хранятся постоянно).
В качестве библиотек можно подключать данные, которые физически находятся не в формате наборов данных SAS (промышленные БД, excel, access). Для большей части вашей программы будет всё равно, как (и где) данные хранятся.
Подключение библиотеки в on-demand
1. Подключиться к серверу SASApp
2. Подключить (Assign) нужную библиотеку
Создание библиотек• Подключение библиотеки производится:
– либо через «wizard» (Tools->assign project library) – ф.с. на сервере
– либо программным путём (оператор libname):
libname mylib ‘c:dir_with_data‘;
mylib — название библиотеки: 0-9, a-z, _, не может начинаться с цифры, не более 8 символов длиной
• Подключенная таким образом библиотека «живет» до завершения процесса sas.exe (для Guide — до отключения от сервера)
• Теперь в программе можно обращаться к набору данных не указывая полный путь (c:dir_with_datatestdataset.sas7bdat), а с помощью 2-х уровневого имени (которое записывается через точку):
Если первая часть не указана – предполагается библиотека Work
Содержимое библиотеки можно посмотреть в окне «Server list», или с помощью процедуры:
proc contents data=sasuser._all_;
Нельзя в on-demand
Программа на языке SAS Base
1 options linesize=95 pagesize=52;
3 data work.NewSalesEmps;
4 length First_Name $ 12 Last_Name $ 18
5 Job_Title $ 25;
6 infile ‘newemps.csv’ dlm=’,’;
7 input First_Name $ Last_Name $
8 Job_Title $ Salary;
11 proc print data=work.NewSalesEmps;
14 proc means data=work.NewSalesEmps;
15 class Job_Title;
Программа на языке SAS Base• Программа не требует явного подключения «библиотек» с
процедурами, которые есть в установленном дистрибутиве SAS («#include»)
• Программа выполняется «сверху вниз» по шагам
• Минимальный «кусочек» программы, который SAS может выполнить, это один шаг (начинается с операторов «data», «proc»)
• Можно выполнить один или несколько шагов программы (выделить код мышкой и нажать кнопку RUN)
• Каждый оператор должен заканчиваться «;»• Каждый шаг должен заканчиваться операторами «run;»,
«quit;», или началом следующего шага
• Форматирование свободное (программу можно записать в одну строку, оператор можно разбивать на несколько строк)
Справка• Справка в свободном доступе (веб-интерфейс либо pdf)
1) Поиск справки по элементам языка SAS BASE нужно начинать с описания интересующей процедуры (и уже в ней искать справку о конкретном операторе)
2) Пункт overview – общие слова о том, что может делать процедура (шаг PROC)
3) Пункт examples – для самых нетерпеливых
4) Дополнительные материалы*) Материалы конференции SUGI (обмен опытом между пользователями)*) Справки по конкретным продуктам SAS
Рекомендуется иметь под рукой:SAS/STAT(R) 9.3 User’s GuideSAS(R) 9.3 Functions and CALL Routines: ReferenceBase SAS(R) 9.3 Procedures Guide, Second EditionSAS(R) 9.3 SQL Procedure User’s Guide…
Шаг DATA• Обработку данных нужно было делать ещё до того, как был принят стандарт
для SQL (wiki: в 1986 году первый стандарт языка SQL был принят ANSI, SAS –развивается с 1966г, с 1976 как коммерческий продукт).
• Шаг DATA дополняет SQL и наоборот (SQL – работа с множеством наблюдений, шаг DATA – работа с единичными наблюдениями). Чем пользоваться для конкретных целей – нужно думать.
• Шаг DATA очень часто требует существенно меньше ресурсов по сравнению с SQL (важно если данных много), но нужно изучить логику его работы, которая бывает нетривиальной.
• Позволяет создавать и манипулировать наборами данных SAS (включая запись, чтение наборов данных, чтение необработанных данных, изменение структуры, создание агрегатов, объединение таблиц, фильтрацию наблюдений, можно использовать условные переходы, циклы, вызов пользовательских и встроенных функций, . ).
• Мы посмотрим малую часть того, что может шаг DATA. Справка по DATA STEP:
– SAS(R) 9.3 Language Reference: Concepts, Second Edition -> DATA Step Concepts
– SAS(R) 9.3 Language Reference: Concepts, Second Edition -> Dictionary of Language Elements -> SAS Data Set Options
Шаг DATAСамая простая операция – создание копии набора данных:
новый набор данных
исходный набор данных
Что происходит при запуске такого шага?(см. Overview of DATA Step Processing: Flow of Action)
26 data employees;
27 set employee_list;
1) Фаза «компиляции»: — проверка синтаксиса- создание вектора данных (PDV) – области в
памяти, где хранятся значения переменных для одного наблюдения (строчки) из исходного набора данных, включая новые и служебные переменные.
— создание дескриптора (служебной части) для нового набора данных (хранит информацию о типах, названиях переменных, свойства набора данных и проч.)
Что происходит после фазы «компиляции»?
2) Фаза «выполнения» – выполнение “цикла” внутри шага data. Одна итерация цикла – это обработка одного наблюдения (строчки)
У нас он состоит только из одного оператора SET и неявных операторов, которых мы в программе не видим.
Вопрос: Когда этот цикл закончится?17
Шаг DATA26 data employees;
27 set employee_list;
Ошибок в синтаксисе нет
Названия, типы и свойства переменных взяты из исходной таблицы на фазе компиляции
Data Set Name … Observations …
Member Type … Variables ..
Created … Observation Length …
Last Modified … Deleted Observations …
VAR1 (Num) VAR2 (Char) VAR3 (Num)
26 data employees;
27 set employee_list;
Data Set Name … Observations …
Member Type … Variables ..
Created … Observation Length …
Last Modified … Deleted Observations …
VAR1 (Num) VAR2 (Char) VAR3 (Num)
Data Set Name … Observations …
Member Type … Variables ..
Created … Observation Length …
Last Modified … Deleted Observations …
VAR1 (Num) VAR2 (Char) VAR3 (Num)
0. Проверка на достижение конца исх. файла1. Явный оператор Set = Чтение из
Employee_list в PDV2. Неявный оператор Output = сброс
содержимого PDV в employees3. Неявный оператор Return = возврат к
началу цикла внутри шага DATA
Выбор наблюдений по условию
Источник: vdocuments.mx