Bonsoir,
Je cherche à calculer le semestre à partir d'une date.
Mais je n'arrive pas à trouver la fonction sas correspondante.
Pourriez vous m'aider ?
Version imprimable
Bonsoir,
Je cherche à calculer le semestre à partir d'une date.
Mais je n'arrive pas à trouver la fonction sas correspondante.
Pourriez vous m'aider ?
A ma connaissance,
SAS propose des formats qui permettent de retrouver directement le trimestre, mais pas le semestre, cf exemples :
Il doit même y avoir un format qtr. qui donne le trimestre sans l'année, mais à partir de la v9.2 seulement (et oui, je suis en v9.1.3 ...)Code:
1
2
3
4
5
6 data test ; date = "01jan2010"d ; year_Q_quarter = put(date, yyq.) ; year_quarter = put(date, yyqn.) ; putlog _all_ ; run ;
Pour avoir le semestre, il faudra donc feinter. Proposition, en partant de la fonction month() :
Tu peux te faire plaisir en faisante une macro %semestre() si tu en fais un usage fréquent :Code:
1
2
3
4
5
6 data test ; date = "01jan2010"d ; month = month(date) ; semestre = 1 + (month(date) > 6) ; putlog _all_ ; run ;
Il doit être possible de créer une fonction, mais ça j'ai jamais faitCode:
1
2
3
4
5
6
7
8 %macro semestre(date) ; 1 + (month(&date.) > 6 ) %mend ; data test ; date = "01jan2010"d ; semestre = %semestre(date) ; putlog _all_ ; run ;
Bonjour,
il ya plusieurs comprehensions possibles. Est ce qu'il s'agit de renvoyer le semestre de l'annee en cours?(0 ou 1 suivant qu'on est avant le 30 juin ou apres)?Citation:
Je cherche à calculer le semestre à partir d'une date.
essaye la fonction intck avec l'interval semiyear.
http://dept.kent.edu/sas/lgref/z0212868.htm
Avec intnx je recupere le debut de l'anneeCode:
1
2
3
4
5
6
7
8
9 data test; format date date9.; date=15362; semester=intck('semiyear',intnx('year',date,0,"b"),date); output; date=15552; semester=intck('semiyear',intnx('year',date,0,"b"),date); output; run;
Bonjour,
Manoutz, ce que je cherche est effectivement une fonction qui me permettrait de retourner le trimestre T1ou Q1. La fonction
que Remi m'indiquait fonctionne très bien.Code:year_Q_quarter = put(date, yyq.) ;
Par contre pour le semestre je n'ai pas trouvé.
J'essaye ton bout de code.
c'est exactement ce que je voulais en ajoutant +1 comme dans le code de Rémi.
Rémi a écrit :
Comment faire pour créer cette fonction que je pourrais rappeler quand je voudrais ?Citation:
Il doit être possible de créer une fonction, mais ça j'ai jamais fait
si tu as la 9.2/9.3 tu regardes la proc FCMP et son cadre d'utilisation.
ou passer par une macro fonction, tout simplement...
D'ailleurs, tu dois pouvoir parameter si tuveux calculer sur le trimestre ou le semestre, en utilisant (et en appliquant au trimestre, selon) le code que je t'ai fourni
ENT((MOIS(A1)-1)/6)+1 calcule le numéro du semestre
ENT((MOIS(A1)-1)/3)+1 calcule le numéro du trimestre
Bonjour,
J'avais utilisé la solution de Manoutz.
Mais ton bout de code fonctionne parfaitement.
Code:
1
2
3
4
5
6
7
8
9
10
11 DATA test; FORMAT date yymmn6.; date='22JAN2015'd; semester=INTCK("SEMIYEAR",INTNX('YEAR',date,0,"B"),date); semestre=CEIL((MONTH(date) -1)/6) +1 ; OUTPUT; date='31JUL2015'd; semester=INTCK("SEMIYEAR",INTNX('YEAR',date,0,"B"),date); semestre=CEIL((MONTH(date) -1)/6) +1 ; OUTPUT; RUN;