Recentemente me pediram ajuda com o SAS, para que fosse possível colocar, para determinada coluna, o quanto cada linha representava (%) da soma total dessa coluna. Na sequência, seria preciso colocar a soma cumulada desses percentuais. Acho bastante útil essa manobra. O curioso, é que no proc freq dá para obter a frequência acumulada, mas não o valor. Por isso tive que fazer de um jeito um pouquinho mais trabalhoso:
/*cria uma tabela de exemplo*/ data exemplo; input id $ valor; cards; APEOEIQK 100 BDJQOPEX 200 BCAPEORP 300 XRALPOED 400 XAWPELOR 500 ; run;
/* cria coluna com representatividade (%) de cada linha*/ proc sql; create table exemplo_v2 as select id , valor , valor/total_valor as percentual format=percent7.1 from (select * , sum(valor) as total_valor from exemplo) group by 1; run;
O passo a seguir não é necessário, mas como eu já o fiz, resolvi colocar:
/* organiza com percentual em ordem decrescente */ proc sort data=exemplo_v2; by descending percentual; run;
/* cria coluna cumulativa */ data exemplo_v3; set exemplo_v2; percentual_acumulado+percentual; run;
Ou então:
/* cria coluna cumulativa */ data exemplo_v3; set exemplo_v2; attrib percentual_acumulado format=percent7.1 ; percentual_acumulado+percentual; run;
Acredito que no proc tabulate e no proc freq seja possível fazer isso. Vou tentar depois e, se eu conseguir, posto em seguida aqui.
boa tarde.
Como faço no SAS para trazer numera todas as linhas em sequência?
Fala Anderson, desculpe a demora em responder. O que você quer é ter uma coluna com o número da linha (1,2,3…)?
Olá Anderson,
Cria a coluna de ID assim:
DATA;
SET;
ID = _N_;
RUN;