Sei sulla pagina 1di 25

Mini Curso de

conhecimentos de
programao no SAS

O que veremos:
Processos Iterativos
Conhecimento de Arrays
Algumas funes interessantes no
SAS

IF / ELSE / DO
Exemplo: prog2. FFMETHOD

IF (expression) THEN
DO;
< additional SAS statements >
END;

IF / ELSE / DO
DATA BUYHISTORY;
SET PROG2.FFMETHOD;
LENGTH METHOD $ 13;
IF INTERNET = 'Y' THEN
DO;
METHOD='Internet';
OUTPUT;
END;
IF TELEPHONE = 'Y' THEN
DO;
METHOD='Telephone';
OUTPUT;
END;
IF TRAVELAGENCY = 'Y' THEN
DO;
METHOD='Travel Agency';
OUTPUT;
END;
KEEP ID METHOD;
RUN;

SADA EXPLCITA E IMPLCITA


Controle Explcito/Implcito de OUTPUT de
vrias observaes no data set.
set
Exemplo: prog2.growth

data growth;
set prog2.growth;
run;

data forecast1;
drop numemps;
set prog2.growth;
year=1;
newtotal= numemps*(1 + increase);
output;
year=2;
newtotal= newtotal*(1 + increase);
output;
year=3;
newtotal= newtotal*(1 + increase);
output;
run;

data forecast2;
set prog2.growth (rename=(numemps=newtotal));
do year=1 to 3;
newtotal=newtotal*(1+increase);
output;
end;
run;

DO WHILE / DO UNTIL:
DO WHILE / DO UNTIL a expresso validada pelo sas no
nicio do do while/do until, se no
for o sas nem executa.
DO WHILE (expression)
< additional SAS statements >
END;
DO UNTIL (expression)
< additional SAS statements >
END;
data invest;
do until
(capital>1000);
year+1;
capital+5;
capital+
(capital*.075);
end;
run;

data invest;
do while (capital<1000)
year+1;
capital+5;
capital+(capital*.075);
end;
run;

data invest3;
do year=1 to 25 until (capital>250);
capital+5;
capital+(capital*.075);
end;
run;

NESTED DO LOOPS:
Exemplo: prog2.banks

3x

data invest (drop=semestre);


set prog2.banks;
capital=0;
do ano=1 to 5;
capital+5;
do semestre=1 to 4;
5x
4x capital+(capital*(rate/4));
end;
end;
run;

PROCEDIMENTO ARRAY:
Pode-se utilizar o ARRAY para simplificar clculos
repetitivos dentro do SAS;
Cria diversas variveis com os mesmos atributos
Leitura de dados
Entre outros

Exemplo: prog2.donate (uma parte do arquivo)

{}
[]
()
ID

QTR1

CONTRIB
QTR2

QTR3

QTR4

1
elemento

2
elemento

3
elemento

4
elemento

Contrib{1}

Contrib{2}

Contrib{3}

Contrib{4}

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;

CRIANDO VARIVEIS COM ARRAYS:


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;

Exerccio 1:
Um Ski-Resort tem anotado a temperatura diria. Cada observao
(prog2.ski) contem a data por hora das temperaturas em Fahrenheit
comeando em 1:00.

Exerccio 1:
Um Ski-Resort tem anotado a temperatura diria. Cada observao
(prog2.ski) contem a data por hora das temperaturas em Fahrenheit
comeando em 1:00.

Exemplo: prog2.ski (uma parte do arquivo)

Exerccio 1: (continuao)
Criar um data set chamado celsius por leitura do data set prog2.ski.
Converter todas as temperaturas de T1 a T24 para Celsius. Usar a
seguinte frmula:
Celsius temperature=5*(fahrenheit temperature 32)/9
(no para criar novas variveis com a temperatura celsius)

Criar a varivel cost que contem o custo dirio da mquina de neve. Se a


mquina funcionar a uma temperatura menor que 2 graus celsius o custo
ser R$ 125,00 por hora.

Exerccio 1: (resposta)
data celsius;
set prog2.ski;
cost=0;
array temps{24} T1-T24;
do i= 1 to 24;
temps{i}=round(5*(temps{i}-32)/9,.1);
if temps{i} lt 2 then
cost+125;
end;
run;

Exerccio 2:
Criar um data step quarter - a partir do prog2.donate. Calcular a mdia
de contribuio para os empregadores por semestre, e ento calcular a
diferena entre cada contribuio semestral e a mdia. Use ARRAY para
a performance do clculo.

Exemplo: prog2.donate (uma parte do arquivo)

Exerccio 2: (resposta)
data quarter (drop=qtr qtr1-qtr4);
set prog2.donate;
array contrib{4} QTR1-QTR4;
array diff{4};
average=mean(of qtr1-qtr4);
do qtr=1 to 4;
diff{qtr}=contrib{qtr}-average;
end;
run;

Exerccio 2: (resposta)

FUNES

Newvar = SUBSTR (string,start<,length>)


state = SUBSTR (location,11,2);
Location $18

State $18

Columbus, OH 43227

OH

Newvar = RIGHT (argument) / Newvar = LEFT (argument)


newid = right (ID);
ID $6
F161

NEWID $6
F161

Newvar = SCAN (string,n<,delimiters>)


Delimitadores para o SAS: blank . < ( + | & ! $ * ) ; - / , % ^
OBS: Se o n for negativo o SCAN seleciona a palavra do final da string.

second = scan (phrase,2, );


PHRASE $21
Software and services

PHRASE $200
services

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

Var2

Var3

Var4

Var5

$200

$200

$200

$200

$200

Thursday

1776

1776)

1776

Newvar = CATX (separator, string-1,...,string-n)


CAT contatena strings sem remover leading or trailing brancos.
CATS contatena strings e remove leading or trailing brancos.
CATT contatena strings e remove apenas trailing brancos.

PHRASE $21
Software and services

PHRASE $200
services

Potrebbero piacerti anche