2 votes

Comment limiter le nombre de mois dans SAS

J'ai une colonne nommée "month" qui contient 31 mois.

Ce que je veux faire, c'est limiter le nombre de mois.

par exemple:- le mois en cours suivi de deux mois futurs et de trois mois précédents suivis du mois en cours

Par exemple, si le mois en cours est avril, il doit afficher quelque chose comme

FEb-MAR-APR(mois en cours)-MAI- JUIN

Quelqu'un sait-il comment nous pouvons le faire dans SAS et le modifier dynamiquement ?

Mois de la colonne actuelle du tableau (Format dtdate9.)

01JAN2016 01FEB2016 01MAR2016 01APR2016 01MAI2016 01JUN2016 01JUL2016 01AUG2016 01SEP2016 01OCT2016 01NOV2016 01DEC2016 01JAN2017 01FEB2017 01MAR2017 01APR2017 01MAI2017 01JUN2017 01JUL2017 01AUG2017 01SEP2017 01OCT2017 01NOV2017 01DEC2017 01JAN2018 01FEB2018 01MAR2018 01APR2018 01MAI2018 01JUN2018 01DEC2018

Je veux deux colonnes date max et date min : la date max donnera +2 et la date min sera -3 et pour chaque mois en cours, elle doit changer dynamiquement. Ces deux colonnes max et min seront utilisées dans mon outil de reporting SAS VA en tant que mois entre min et max.

Merci d'avance

1voto

momo1644 Points 1632

Si vous avez des données tabulaires, vous n'avez que deux étapes à suivre :

  1. (étape facultative) Trier les données par date et non par nom de mois PROC SORT
  2. Utilisation INTCK() pour vérifier l'intervalle (en mois) souhaité et date() qui renvoie la date du jour.

Données fictives :

data have;
length date 8. month $3. ;
input date month $ ;
informat date anydtdte20.;
format date ddmmyys10.;
datalines;
01/07/2018 JUL
01/02/2018 FEB
01/03/2018 MAR
01/04/2018 APR
01/05/2018 MAY
01/06/2018 JUN
01/08/2018 AUG
01/09/2018 SEP
;
run;

proc sort data=have out=sorted; by date; run;

Solution 1 : Utilisation de Data Step

data want;
set sorted;
diff= intck('month',date(),date);
if (diff<= 2 and diff>= -3) then output;
run;

Solution 2 : Utilisation de Proc SQL

proc sql;
create table want2 as
select * from sorted
where intck('month',date(),date) between 2 and -3 ;
quit;

Sortie :

date=01/02/2018 month=FEB diff=-3 
date=01/03/2018 month=MAR diff=-2 
date=01/04/2018 month=APR diff=-1 
date=01/05/2018 month=MAY diff=0 
date=01/06/2018 month=JUN diff=1 
date=01/07/2018 month=JUL diff=2

1voto

momo1644 Points 1632

Utilisation INTNX() pour obtenir une plage de données spécifique (incrémentation ou décrémentation)

Données :

data have;
input date ;
informat date date9.;
datalines;
01NOV2017 
01DEC2017 
01JAN2018 
01FEB2018 
01MAR2018 
01APR2018 
01MAY2018 
01JUN2018 
;
run;

Solution :

proc sql;
create table want as
select 
date format=date9. ,
intnx('month',date,-3) as min_date format=date9.,
intnx('month',date,+2) as max_date format=date9.
from have;
quit;

Sortie :

date=01NOV2017 min_date=01AUG2017 max_date=01JAN2018
date=01DEC2017 min_date=01SEP2017 max_date=01FEB2018
date=01JAN2018 min_date=01OCT2017 max_date=01MAR2018
date=01FEB2018 min_date=01NOV2017 max_date=01APR2018
date=01MAR2018 min_date=01DEC2017 max_date=01MAY2018
date=01APR2018 min_date=01JAN2018 max_date=01JUN2018
date=01MAY2018 min_date=01FEB2018 max_date=01JUL2018
date=01JUN2018 min_date=01MAR2018 max_date=01AUG2018

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X