Глава 7 Преобразование данных. Раздел 7.1 Введение.

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



Advertisements
Похожие презентации
Преобразование данных. Функции SAS Функции SAS классифицированы по типу данных, с которыми выполняются операции Массив Символьный Дата и время Описательная.
Advertisements

Символы и строки. Процедуры и функции работы со строками.
Переменная - это величина, которая имеет имя, тип и значение. Значение переменной может меняться во время выполнения программы. В компьютерах каждая переменная.
Строки в Pascal
Массивы 9 класс. Основные теоретические сведения Примеры решения задач.
Тема урока Переменная. Тип данных. Ввод и вывод данных.
«Обработка строковых данных» Delphi. Тема 7:7: «Обработка строковых данных» План темы: 1. Понятие символа и строки. 2. Описание символов и строк в программе.
Выражения унарные (унарный минус) арифметические (+, -, *, /) сравнения (, =, =, , LIKE, BETWEEN...) конкатенации (||) логические (NOT, AND, OR)
Понятие оператора и программы 11 класс. Программирование.
Объектно-ориентированный язык программирования. Переменная - эта поименованная ячейка памяти, хранящая какое-либо одно значение (одно число, один фрагмент.
Символьные и строковые переменные. Общие понятия Для того чтобы ЭВМ могла обрабатывать тексты, она должна уметь оперировать не только с числами, но и.
класс-СТАНДАРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ РАБОТЫ С СИМВОЛЬНЫМИ И СТРОКОВЫМИ ВЕЛИЧИНАМИ.
Основы алгоритмизации и программирования Чабанюк Виктория 10 класс.
Строки, Списки, Кортежи.. Строки (string) Строка-это последовательность букв Для обозначения строки используются одинарные или двойные кавычки. Для длинных.
Моделирование в электронных таблицах. Этап 4 можно реализовать с помощью табличного процессора. Конкретно с помощью программы Microsoft Excel.
План-конспект урока (информатика и икт, 9 класс) по теме: Переменные:тип, имя, значение
Алгоритмический язык и язык Бейсик Ученицы 11-А класса ОШ 15 Бондаренко Натальи.
Строковые константы записываются как последовательности символов, ограниченные апострофами. Пример: 'Текстовая строка' Пустой символ обозначается двумя.
Введение в Паскаль. ввод Для ввода чисел используется оператор read или readln. Вводимые числа должны отделяться друг от друга пробелом или нажатием клавиши.
Тема: Относительные и средние величины статистики в MS Excel.
Транксрипт:

Глава 7 Преобразование данных

Раздел 7.1 Введение

3 Цели Изучить синтаксис SAS функций.

4 SAS функции Система SAS предоставляет большой набор функций для управления данными на этапе выполнения шага данных. SAS функций организуют в категории по типу манипуляций над данными: усечение усечение символьная символьная дата и время дата и время математическая математическая тригонометрическая тригонометрическая специальная специальная статистические методы арифметическая финансовая случайное число штат и ZIP код (US).

5 Синтаксис SAS функций SAS функции – это встроенные выражения, которые позволяют выполнять различные виды манипуляций над данными. SAS функция возвращает значение, основанное на аргументах. Функции используют аргументы, которые задает пользователь или операционная среда. Общая форма записи SAS функции: function-name(argument-1,argument-2,…,argument-n)

6 Применение SAS функций SAS функция может быть задана в любом месте SAS выражения до тех пор, пока функция является частью предложения. data contrib; set prog2.donate; Total=sum(Qtr1,Qtr2,Qtr3,Qtr4); if Total ge 50; run; proc print data=contrib noobs; run;

7 Применение SAS функций PROC PRINT Output PROC PRINT Output ID Qtr1 Qtr2 Qtr3 Qtr4 Total E E E E E

8 Задание списка переменных Список SAS переменных – это сокращенный метод сослаться на перечень имен переменных, которые могут быть использованы в качестве аргументов. В этом случае перечень или массив предваряется словом OF.

9 Задание списка переменных Если аргументы задаются с помощью перечисления переменных, убедитесь, что вначале списка стоит ключевое слово OF. Если вы пропустите слово OF, то аргументы функции могут быть интерпретированы иначе, например, как разница двух значений. data contrib; set prog2.donate; Total=sum(of Qtr1-Qtr4); if Total ge 50; run;

Раздел 7.2 Модификация символьных значений

11 Цели Использовать SAS функции и операторы для извлечения, редактирования и поиска символьных значений.

12 Задача Набор данных prog2. freqflyers содержит информацию о постоянных клиентах авиакомпании. Используйте эту таблицу, чтобы создать новый набор с удобной информацией для почтовых рассылок.

13 Задача ID это символьная переменная. Последняя цифра в этой переменной обозначает пол клиента ( 1 – женский, 2 – мужской). prog2. freqflyers prog2. freqflyers ID Name Address1 Address2 F31351 Farr,Sue 15 Harvey Rd. Macon,Bibb,GA,31298 F161 Cox,Kay B. 163 McNeil Pl. Kern,Pond,CA,93280 F212 Mason,Ron 442 Glen Ave. Miami,Dade,FL,33054 F25122 Ruth,G. H Brady St. Munger,Bay,MI,48747

14 Задача labels labels Первая задача – присвоить титул Mr. или Ms. к имени на основе последней цифры переменной ID. FullName Address1 Address2 Ms. Sue Farr 15 Harvey Rd. Macon, GA Ms. Kay B. Cox 163 McNeil Pl. Kern, CA Mr. Ron Mason 442 Glen Ave. Miami, FL Mr. G. H. Ruth 2491 Brady St. Munger, MI 48747

15 Функция SUBSTR (правая часть) Функция SUBSTR используется для выделения подстроки из символьной переменной или замены содержимого символьной переменной. Данная форма функции SUBSTR (в правой стороне выражения) выделяет символы из переменной. NewVar=SUBSTR(string,start );

16... Функция SUBSTR (правая часть) Выделить два символа из переменной Location, начиная с 11-ой позиции. State=substr(Location,11,2); STATE $ 18 OH LOCATION $ 18 Columbus, OH 43227

17 proc print data=prog2. freqflyers noobs; var ID; run; Задача ID F31351 F161 F212 F25122 PROC PRINT Output

18... Функция RIGHT Функция RIGHT выравнивает аргумент по правому краю. Замыкающие пробелы перемещаются в начало значения. NewID=right(ID); NewVar=RIGHT(argument); NEWID $ 6 F161 ID $ 6 F161

19 data labels; set prog2.freqflyers; if substr(right(ID),6)='1' then Title='Ms.'; else if substr(right(ID),6)='2' then Title='Mr.'; run; proc print data=labels noobs; var ID Title; run; Задача Результат функции RIGHT работает как первый аргумент функции SUBSTR.

20 Задача ID Title F31351 Ms. F161 Ms. F212 Mr. F25122 Mr. PROC PRINT Output

21... Задача Следующая задача – разделить имена клиентов на две части. NAME Farr,Sue Cox,Kay B. FMNAME Sue Kay B. LNAME Farr Cox

22 Функция SCAN Функция SCAN выделяет указанное слово из строки с использованием разделителя. Эту функцию лучше использовать, когда вам известен порядок слов в символьной переменной, изменяется исходная позиция слов, слова помечены разделителями. NewVar=SCAN(string,n );

23 Функция SCAN назначает длину 200 байт для каждой искомой переменной, если ранее не задан оператор LENGTH назначает длину 200 байт для каждой искомой переменной, если ранее не задан оператор LENGTH разделители перед первым словом не учитываются разделители перед первым словом не учитываются любой символ может использоваться в качестве разделителя любой символ может использоваться в качестве разделителя два или более последовательных разделителя рассматриваются как один два или более последовательных разделителя рассматриваются как один если слов в строке меньше, чем n, то возвращается пустое значение если слов в строке меньше, чем n, то возвращается пустое значение если n – отрицательное, SCAN извлекает слово из символьной переменной, начиная отсчет с конца строки. если n – отрицательное, SCAN извлекает слово из символьной переменной, начиная отсчет с конца строки.

24... SECOND $ 200 and Second=scan(Phrase,2,' '); Функция SCAN Выделить второе слово из переменной Phrase. PHRASE $ 21 software and services 123

25... Second=scan(Phrase,2,':'); Функция SCAN Выделить второе слово из переменной Phrase. 12 SECOND $ 200 services PHRASE $ 21 software and:services

26... VAR3 $ 200 Функция SCAN VAR2 $ data scan; Text='(Thursday July 4, 1776)'; Var1=scan(Text,1); Var2=scan(Text,4); Var3=scan(Text,5); Var4=scan(Text,2,','); Var5=scan(Text,2,',)'); run; VAR1 $ 200 Thursday

27... Функция SCAN VAR4 $ ) data scan; Text='(Thursday July 4, 1776)'; Var1=scan(Text,1); Var2=scan(Text,4); Var3=scan(Text,5); Var4=scan(Text,2,','); Var5=scan(Text,2,',)'); run; VAR1 $ 200 Thursday VAR2 $ VAR3 $ 200

28 VAR5 $ Функция SCAN data scan; Text='(Thursday July 4, 1776)'; Var1=scan(Text,1); Var2=scan(Text,4); Var3=scan(Text,5); Var4=scan(Text,2,','); Var5=scan(Text,2,',)'); run;... VAR1 $ 200 Thursday VAR2 $ VAR3 $ 200 VAR4 $ )

29... Функция SCAN VAR1 $ 200 Thursday VAR2 $ VAR3 $ 200 VAR4 $ ) VAR5 $ data scan; Text='(Thursday July 4, 1776)'; Var1=scan(Text,1); Var2=scan(Text,4); Var3=scan(Text,5); Var4=scan(Text,2,','); Var5=scan(Text,2,',)'); run;

30 Задача data labels; length FMName LName $ 10; set prog2.freqflyers; if substr(right(ID),6)='1' then Title='Ms.'; else if substr(right(ID),6)='2' then Title='Mr.'; FMName=scan(Name,2,','); LName=scan(Name,1,','); run;

31 proc print data=labels noobs; var ID Name Title FMName LName; run; Задача ID Name Title FMName LName F31351 Farr,Sue Ms. Sue Farr F161 Cox,Kay B. Ms. Kay B. Cox F212 Mason,Ron Mr. Ron Mason F25122 Ruth,G. H. Mr. G. H. Ruth Следующая задача – соединить вместе значения Title, FMName и LName. PROC PRINT Output

32 Оператор объединения Оператор объединения соединяет символьные значения. Символ для соединения символьных значений, в зависимости от возможностей вашей клавиатуры, может быть представлен как два знака восклицания (!!), две вертикальных черты (||), или две прерывистые черты (¦¦). NewVar=string1 !! string2;

33... Sue Farr FULLNAME $ 20 Оператор объединения Соединить значения FMName и LName, чтобы создать FullName. FullName=FMName !! LName; Sue FMNAME $ 10 Farr LNAME $ 10

34 Функция TRIM Функция TRIM удаляет замыкающие пробелы из аргумента. Если аргументом функции является пробел, то TRIM возвращает один пробел. NewVar=TRIM(argument1) !! argument2;

35 Функция TRIM... data trim; length FMName LName $ 10; FMName='Sue'; LName='Farr'; FullName1=trim(FMName); FullName2=trim(FMName) !! LName; FullName3=trim(FMName) !! ' ' !! LName; run; FULLNAME1 $ 10 FULLNAME2 $ 20 SueSueFarr FULLNAME3 $ 21

36... Функция TRIM Функция TRIM FULLNAME1 $ 10 FULLNAME2 $ 20 SueSueFarr FULLNAME3 $ 21 data trim; length FMName LName $ 10; FMName='Sue'; LName='Farr'; FullName1=trim(FMName); FullName2=trim(FMName) !! LName; FullName3=trim(FMName) !! ' ' !! LName; run;

37 Задача data labels(keep=FullName Address1 Address2); length FMName LName $ 10; set prog2.freqflyers; if substr(right(ID),6)='1' then Title='Ms.'; else if substr(right(ID),6)='2' then Title='Mr.'; FMName=scan(Name,2,','); LName=scan(Name,1,','); FullName=Title !! ' ' !! trim(FMName) !! ' ' !! LName; Address2=scan(Address2,1,',') !! ', ' !! scan(Address2,3,',') !! ' ' !! scan(Address2,4,','); run;

38 Задача FullName Address1 Address2 Ms. Sue Farr 15 Harvey Rd. Macon, GA Ms. Kay B. Cox 163 McNeil Pl. Kern, CA Mr. Ron Mason 442 Glen Ave. Miami, FL Mr. G. H. Ruth 2491 Brady St. Munger, MI proc print data=labels noobs; var FullName Address1 Address2; run; PROC PRINT Output

39 Задача Набор данных prog2. ffhistory содержит дополнительную информацию о каждом постоянном клиенте. Эта информация включает данные о статусе услуг, которые получает данный клиент (bronze, silver или gold) год перехода клиента на следующий уровень. Создать отчет, который показывает всех постоянных клиентов, имеющих статус Silver и год, когда они получили этот статус.

40 Задача prog2. ffhistory Seat ID Status Pref F31351 Silver 1998,Gold 2000 AISLE F161 Bronze 1999 WINDOW F212 Bronze 1992,silver 1995 WINDOW F25122 Bronze 1994,Gold 1996,Silver 1998 AISLE Необходимо из переменной Status выделить значение Silver.

41 Функция INDEX позволяет отыскивать символьное значение для определенной строки. Функция INDEX перебирает значения слева направо, разыскивая первое упоминание в строке. Она возвращает позицию первого символа строки; если строка не найдена, то присваивает значение 0. Функция INDEX Position=INDEX(target,value);

42... POS N 8 24 Text="This target contains a BULL'S-EYE."; Pos=index(Text,"BULL'S-EYE"); Функция INDEX Определить, содержит ли переменная Text строку "BULL'S-EYE". TEXT $ 34 This target contains a BULL'S-EYE. 24

43... POS3 N 8 0 Функция INDEX POS2 N 8 8 POS1 N 8 6 data index; Text='DELIMIT IT WITH BLANKS.'; Pos1=index(Text,'IT'); Pos2=index(Text,' IT '); Pos3=index(Text,'it'); run; 68

44... Функция INDEX data index2; length String $ 5; String='IT'; Text='DELIMIT IT WITH BLANKS.'; Pos4=index(Text,String); Pos5=index(Text,trim(String)); Pos6=index(Text,' ' !! trim(String) !! ' '); run; 68 STRING $ 5 IT POS6 N 8 8 POS5 N 8 6 POS4 N 8 0

45 Задача Seat ID Status Pref F31351 Silver 1998,Gold 2000 AISLE F161 Bronze 1999 WINDOW F212 Bronze 1992,silver 1995 WINDOW F25122 Bronze 1994,Gold 1996,Silver 1998 AISLE prog2. ffhistory data silver; set prog2.ffhistory; if index(Status,'Silver') > 0; run;

46 Seat ID Status Pref F31351 Silver 1998,Gold 2000 AISLE F25122 Bronze 1994,Gold 1996,Silver 1998 AISLE proc print data=silver noobs; run; Задача PROC PRINT Output

47 Функция UPCASE переводит все буквы символьной строки в верхний регистр переводит все буквы символьной строки в верхний регистр не влияет на цифры и специальные символы. не влияет на цифры и специальные символы. NewVal=UPCASE(argument);

48 Задача data silver(drop=Location); length Year $ 4; set prog2.ffhistory; Location=index(upcase(Status),'SILVER'); if Location > 0; Year=substr(Status,Location+7,4); run; proc print data=silver noobs; var ID Status Year SeatPref; run;

49... Задача Seat ID Status Year Pref F31351 Silver 1998,Gold AISLE F212 Bronze 1992,silver WINDOW F25122 Bronze 1994,Gold 1996,Silver AISLE Year=substr(Status,Location+7,4); LocationLocation+7

50 Функция TRANWRD Функция TRANWRD заменяет указанную подстроку символов на новую. где source определяет строку, которую вы хотите преобразовать target указывает на строку, которую SAS ищет в source replacement определяет строку, которую подставляет target. NewVal=TRANWRD(source,target,replacement);

51... DESSERT $ 20 Apple pie DESSERT $ 20 Pumpkin pie Dessert=tranwrd(Dessert,'Pumpkin','Apple'); Функция TRANWRD Заменить первое слово переменной Dessert.

52 Задача data silver(drop=Location); length Year $ 4; set prog2.ffhistory; Status=tranwrd(Status,'silver','Silver'); Location=index(Status,'Silver'); if Location > 0; Year=substr(Status,Location+7,4); run; proc print data=silver noobs; var ID Status Year SeatPref; run;

53 Задача Seat ID Status Year Pref F31351 Silver 1998,Gold AISLE F212 Bronze 1992,Silver WINDOW F25122 Bronze 1994,Gold 1996,Silver AISLE PROC PRINT Output

54 Функция LOWCASE переводит все буквы символьной строки в нижний регистр переводит все буквы символьной строки в нижний регистр не влияет на цифры и специальные символы. не влияет на цифры и специальные символы. NewVal=LOWCASE(argument);

55 Функция SUBSTR (левая часть) Функция SUBSTR используется для выделения подстроки или модификации значений переменных. Данная форма функции SUBSTR (в левой стороне выражения) используется для модификации значений переменных. SUBSTR(string,start )=value;

56... Заменить два символа переменной Location, начиная с 11-ой позиции. Функция SUBSTR (левая часть) substr(Location,11,2)='OH'; LOCATION $ 18 Columbus, OH LOCATION $ 18 Columbus, GA 43227

57... data silver; set silver; substr(SeatPref,2)= lowcase(substr(SeatPref,2)); run; SEATPREF $ 6 A Функция LOWCASE SEATPREF $ 6 AISLE isle

58 proc print data=silver noobs; var ID Year SeatPref; run; Задача Seat ID Year Pref F Aisle F Window F Aisle PROC PRINT Output

Раздел 7.3 Преобразование числовых значений

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

61 Функции усечения Указанные функции позволяют выполнить усечение значения переменной: функция ROUND функция ROUND функция CEIL функция CEIL функция FLOOR функция FLOOR функция INT. функция INT.

62 Функция ROUND Функция ROUND возвращает округленное значение с заданной точностью. Если точность не задана, то округление происходит до ближайшего целого. NewVar=ROUND(argument );

63... Функция ROUND NEWVAR4 100 NEWVAR NEWVAR NEWVAR1 12 data truncate; NewVar1=round(12.12); NewVar2=round(42.65,.1); NewVar3=round(6.478,.01); NewVar4=round(96.47,10); run;

64... Функция CEIL Функция CEIL возвращает наименьшее целое, которое больше чем или равно значению аргумента X 4.4 x=5; NewVar=CEIL(argument); x=ceil(4.4);

65... Функция FLOOR Функция FLOOR возвращает наибольшее целое, которое меньше, чем или равно значению аргумента. X 3.6 NewVar=FLOOR(argument); y=3; y=floor(3.6);

66... Функция INT Функция INT возвращает целую часть аргумента. NewVar=INT(argument); X z=3; z=int(3.9);

67... Функции усечения NEWVAR3 6 NEWVAR2 6 NEWVAR1 7 VAR data truncate; Var1=6.478; NewVar1=ceil(Var1); NewVar2=floor(Var1); NewVar3=int(Var1); run;

68... Функции усечения NEWVAR3 -6 NEWVAR2 -7 NEWVAR1 -6 VAR data truncate; Var1=-6.478; NewVar1=ceil(Var1); NewVar2=floor(Var1); NewVar3=int(Var1); run;

69 Создание новых числовых переменных Указанные функции выполняют вычисление простых статистик: функция SUM (сумма значений) функция SUM (сумма значений) функция MEAN (среднее значение) функция MEAN (среднее значение) функция MIN (наименьшее значение) функция MIN (наименьшее значение) функция MAX (наибольшее значение). функция MAX (наибольшее значение).

70 Функция SUM Функция SUM обеспечивает суммирование значений, при этомпустые значения игнорируются. NewVar=SUM(argument-1,argument-2,…,argument-n);

71 Функция SUM... Каким будет значение переменной NewVar, если использовать арифметический оператор вместо функции SUM? NEWVAR 18 VAR3 6 VAR2. VAR1 12 data summary; Var1=12; Var2=.; Var3=6; NewVar=sum(Var1,Var2,Var3); run;

72... Функция MEAN Функция MEAN Функция MEAN возвращает арифметическое среднее, при этомпустые значения игнорируются. NewVar=MEAN(argument-1,argument-2,…,argument-n);

73... Функция MEAN NEWVAR 9 VAR3 6 VAR2. VAR1 12 data summary; Var1=12; Var2=.; Var3=6; NewVar=mean(Var1,Var2,Var3); run;

Раздел 7.4 Создание числовых переменных, основанных на датах

75 Цели Изучить SAS функции, используемые для создания значений даты в формате SAS. Изучить SAS функции, используемые для создания значений даты в формате SAS. Изучить SAS функции, которые извлекают информацию из значений SAS даты. Изучить SAS функции, которые извлекают информацию из значений SAS даты. Использовать SAS функции для определения интервалов между двумя значениями SAS даты. Использовать SAS функции для определения интервалов между двумя значениями SAS даты.

76 Создание значений SAS даты Вы можете использовать функции MDY или TODAY, чтобы получить значение даты в формате SAS. Функция MDY создает SAS дату из значений месяц, день и год. Функция TODAY возвращает SAS представление текущей даты. NewDate=MDY(month,day,year); NewDate=TODAY();

77 Извлечение информации Вы можете использовать функции MONTH, DAY и YEAR, чтобы извлечь информацию из значения даты в формате SAS. Функция MONTH создает числовое значение (1- 12), которое представляет порядковый номер месяца. NewMonth=MONTH(SAS-date-value); Продолжение...

78 Извлечение информации Функция DAY создает числовое значение (1-31), которое представляет собой день месяца. Функция YEAR создает четырехзначное число, которое представляет собой значение года. NewDay=DAY(SAS-date-value); NewYear=YEAR(SAS-date-value);

79 Вычисление временного интервала Результатом функции YRDIF является количество лет между двумя значениями SAS даты. NewVal=YRDIF(sdate,edate,basis);

80... Функция YRDIF Например, переменная DOB – день рождения. Предположим, что сегодня – 3 мая 2008 г., а DOB – это 8 ноября 1972 г. С помощью функции YRDIF можно подсчитать возраст: MyVal=yrdif(DOB,'3may2008'd,'act/act'); MYVAL

Раздел 7.5 Преобразование типа переменной

82 Цели Изучить автоматическое преобразование символьных данных в числовые данные. Изучить автоматическое преобразование символьных данных в числовые данные. Явно преобразовать символьные данные в числовые. Явно преобразовать символьные данные в числовые. Изучить автоматическое преобразование числовых данных в символьные данные. Изучить автоматическое преобразование числовых данных в символьные данные. Явно преобразовать числовые данные в символьные. Явно преобразовать числовые данные в символьные.

83 Преобразование данных При решении некоторых задач может потребоваться преобразование одного типа данных в другой. Вы можете считывать цифры из символьного представления в числовое значение. Вы можете считывать цифры из символьного представления в числовое значение. Вы можете записывать числовое значение в символьную строку. Вы можете записывать числовое значение в символьную строку.

84 Преобразование данных Вы можете преобразовать типы данных неявно, позволив выполнить это преобразование системе SAS неявно, позволив выполнить это преобразование системе SAS явно, с помощью функций: явно, с помощью функций: INPUTпреобразование символ-в-число INPUTпреобразование символ-в-число PUTпреобразование число-в-символ. PUTпреобразование число-в-символ.

85 Автоматическое преобразование символа в число Набор данных prog2.salary1 содержит символьную переменную Grosspay. Для каждого сотрудника нужно вычислить бонус в размере 10% от зарплаты. Что произойдет, если использовать символьное значение Grosspay в арифметическом выражении?

86 Автоматическое преобразование символа в число prog2.salary1 data bonuses; set prog2.salary1; Bonus=.10*GrossPay; run; ID GrossPay $11 $

87 Partial Log 2 data bonuses; 3 set prog2.salary1; 4 Bonus=.10*GrossPay; 5 run; NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column). 4:14 NOTE: The data set WORK.BONUSES has 3 observations and 3 variables. Автоматическое преобразование символа в число

88 ID GrossPay Bonus proc print data=Bonuses noobs; run; Автоматическое преобразование символа в число PROC PRINT Output

89 SAS автоматически преобразует символьное значение в числовое, когда символьное значение используется в числовом контексте, например, назначается для ранее определенной числовой переменной назначается для ранее определенной числовой переменной участвует в арифметической операции участвует в арифметической операции сравнивается с числовым значением с помощью оператора сравнения сравнивается с числовым значением с помощью оператора сравнения задается в функции, которая требует числовых аргументов. задается в функции, которая требует числовых аргументов. Автоматическое преобразование символа в число

90 Автоматическое преобразование использует вводной формат w.d, где w – ширина преобразуемого символьного значения использует вводной формат w.d, где w – ширина преобразуемого символьного значения вырабатывает пропущенное числовое значение из любой символьной величины, которая не соответствует стандартной числовой записи (цифры с разделителем тысячных значений или с обозначением степени). вырабатывает пропущенное числовое значение из любой символьной величины, которая не соответствует стандартной числовой записи (цифры с разделителем тысячных значений или с обозначением степени). Автоматическое преобразование символа в число

91 Автоматическое преобразование Символьное значение E , Числовое значение Автоматическое преобразование символа в число

92 Функция INPUT Функция INPUT используется для того, чтобы преобразовать символьные значения в числовые. Функция INPUT возвращает значение, созданное при чтении source (символьная переменная) с помощью informat (формат ввода). NumVar=INPUT(source,informat);

93 Функция INPUT data conversion; CVar1='32000'; CVar2='32,000'; CVar3='03may2008'; CVar4='050308'; NVar1=input(CVar1,5.); NVar2=input(CVar2,comma6.); NVar3=input(CVar3,date9.); NVar4=input(CVar4,mmddyy6.); run; proc contents data=conversion; run;

Alphabetic List of Variables and Attributes----- # Variable Type Len Pos ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ 1 CVar1 Char CVar2 Char CVar3 Char CVar4 Char NVar1 Num NVar2 Num NVar3 Num NVar4 Num 8 24 Функция INPUT PROC CONTENTS Output

95 CVar1 CVar2 CVar3 CVar4 NVar ,000 03may NVar2 NVar3 NVar Функция INPUT proc print data=conversion noobs; run; PROC PRINT Output

96 Явное преобразование символа в число Значения переменной Grosspay в наборе данных prog2.salary2 содержат запятые. Попробуем использовать автоматическое преобразование для вычисления 10%-бонуса. prog2.salary2 ID GrossPay $11 $ , , ,000

97 Явное преобразование символа в число data bonuses; set prog2.salary2; Bonus=.10*GrossPay; run; proc print data=bonuses; run; ID GrossPay Bonus , , ,000. PROC PRINT Output

98 Явное преобразование символа в число data bonuses; set prog2.salary2; Bonus=.10*input(GrossPay,comma6.); run; proc print data=bonuses; run; ID GrossPay Bonus , , , PROC PRINT Output

99 Преобразование данных proc contents data=bonuses; run; Partial PROC CONTENTS Output -----Alphabetic List of Variables and Attributes----- # Variable Type Len Pos ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ 3 Bonus Num GrossPay Char ID Char 11 8

100 GrossPay=input(GrossPay,comma6.); Преобразование данных Нельзя выполнять преобразование данных, создавая новую переменную с именем конвертируемой переменной. Такая операция присваивания не преобразует Grosspay из символьной переменной в числовую.

101 Преобразование данных В левой части выражения вы ожидаете получить числовую переменную Grosspay. Однако, в правой части Grosspay является символьной. Переменная – это символ или число. После того, как тип переменной назначен, он не может быть изменен. GrossPay=input(GrossPay,comma6.);

102 Преобразование данных Сначала, переименуйте переменную с помощью опции RENAME=. data bonuses; set prog2.salary2(rename=(GrossPay= CharGross)); run; SAS-data-set(RENAME=(old-name=new-name))

103 Преобразование данных Затем, используйте функцию INPUT в операторе присваивания, чтобы создать новую переменную с оригинальным именем. data bonuses; set prog2.salary2(rename=(GrossPay= CharGross)); GrossPay=input(CharGross,comma6.); run;

104 Преобразование данных И, наконец, используйте опцию DROP= в операторе DATA, чтобы исключить исходную (переименованную) переменную из результата. data bonuses(drop=CharGross); set prog2.salary2(rename=(GrossPay= CharGross)); GrossPay=input(CharGross,comma6.); Bonus=.10*GrossPay; run;

Преобразование данных PDV ID $ 4 CHARGROSS $ 6 data bonuses(drop=CharGross); set prog2.salary2(rename=(GrossPay= CharGross)); GrossPay=input(CharGross,comma6.); Bonus=.10*GrossPay; run;

Преобразование данных PDV ID $ 4 CHARGROSS $ 6 GROSSPAY N 8 data bonuses(drop=CharGross); set prog2.salary2(rename=(GrossPay= CharGross)); GrossPay=input(CharGross,comma6.); Bonus=.10*GrossPay; run;

Преобразование данных PDV ID $ 4 CHARGROSS $ 6 BONUS N 8 GROSSPAY N 8 data bonuses(drop=CharGross); set prog2.salary2(rename=(GrossPay= CharGross)); GrossPay=input(CharGross,comma6.); Bonus=.10*GrossPay; run;

Преобразование данных PDV ID $ 4 CHARGROSS $ 6 BONUS N 8 GROSSPAY N 8 D data bonuses(drop=CharGross); set prog2.salary2(rename=(GrossPay= CharGross)); GrossPay=input(CharGross,comma6.); Bonus=.10*GrossPay; run;

Преобразование данных data bonuses(drop=CharGross); set prog2.salary2(rename=(GrossPay= CharGross)); GrossPay=input(CharGross,comma6.); Bonus=.10*GrossPay; run; PDV ID $ 4 CHARGROSS $ 6 BONUS N 8 GROSSPAY N 8 D

110 Преобразование даты в SAS дату prog2. born Name Date $12 $7 Ruth, G. H. 13apr72 Delgado, Ed 25aug68 Overby, Phil 08jun71 data birth(drop=Date); set prog2.born; Birthday=input(Date,date7.); Age=int(yrdif(Birthday,'3may2008'd, 'ACT/ACT')); run;

111 Name Birthday Age Ruth, G. H Delgado, Ed Overby, Phil Преобразование даты в SAS дату proc print data=birth noobs; run; PROC PRINT Output

112 Автоматическое преобразование числа в символ Набор данных prog2. phones содержит числовую переменную Code (код области) и символьную переменную Telephone (номер телефона). Создайте символьную переменную, которая содержит код области в круглых скобках, за которым следует номер телефона.

113 prog2. phones data phonenumbers; set prog2.phones; Phone='(' !! Code !! ') ' !! Telephone; run; Code Telephone 8 $ Автоматическое преобразование числа в символ

114 Partial Log 13 data phonenumbers; 14 set prog2.phones; 15 Phone='(' !! Code !! ') ' !! Telephone; 16 run; NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column). 15:17 NOTE: The data set WORK.PHONENUMBERS has 3 observations and 3 variables. Автоматическое преобразование числа в символ

115 Code Telephone Phone ( 303) ( 919) ( 301) proc print data=phonenumbers noobs; run; Автоматическое преобразование числа в символ PROC PRINT Output

116 SAS автоматически преобразует числовое значение в символьное, когда числовое значение используется в символьном контексте, например, назначается для ранее заданной символьной переменной назначается для ранее заданной символьной переменной применяется с оператором, который требует символьного значения, такой, как оператор объединения применяется с оператором, который требует символьного значения, такой, как оператор объединения задается в функции, которая требует символьных аргументов. задается в функции, которая требует символьных аргументов. Автоматическое преобразование числа в символ

117 Автоматическое преобразование использует формат BEST12. выравнивает результирующее символьное значение по правому полю. Автоматическое преобразование Числовое значение: 8 байт 303 Символьное значение: 12 байт лидирующих пробелов Автоматическое преобразование числа в символ

118 data phonenumbers; set prog2.phones; Phone='(' !! Code !! ') ' !! Telephone; run; PHONE $ 23 ( 303) лидирующих пробелов Автоматическое преобразование числа в символ

119 Функция PUT создает значения с определенным форматом. Функция PUT возвращает значение, созданное когда source (числовая переменная) записывается с помощью format (соответствует типу source). Функция PUT CharVar=PUT(source,format);

120 Функция PUT data conversion; NVar1=614; NVar2=55000; NVar3=366; CVar1=put(NVar1,3.); CVar2=put(NVar2,dollar7.); CVar3=put(NVar3,date9.); run; proc contents data=conversion varnum; run; Опция VARNUM в PROC CONTENTS выводит список переменных в порядке их логической позиции в наборе данных.

Variables Ordered by Position----- # Variable Type Len ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ 1 NVar1 Num 8 2 NVar2 Num 8 3 NVar3 Num 8 4 CVar1 Char 3 5 CVar2 Char 7 6 CVar3 Char 9 Функция PUT PROC CONTENTS Output

122 NVar1 NVar2 NVar3 CVar1 CVar2 CVar $55,000 01JAN1961 Функция PUT proc print data=conversion noobs; run; PROC PRINT Output

data phonenumbers; 21 set prog2.phone; 22 Phone='(' !! put(Code,3.) !! ') ' !! Telephone; 23 run; NOTE: The data set WORK.PHONENUMBERS has 3 observations and 3 variables. Явное преобразование числа в символ data phonenumbers; set prog2.phones; Phone='(' !! put(Code,3.) !! ') ' !! Telephone; run; Partial Log

124 Code Telephone Phone (303) (919) (301) proc print data=phonenumbers noobs; run; Явное преобразование числа в символ PROC PRINT Output