Bonjour,
j'ai été sollicité hier soir par MP au sujet d'un problème d'évaluation de fonction contenue dans un champ texte ci-joint le message anonymisé
J'ai proposé une solution (je ne l'ai fait que pour un champ mais ça se généralise facilement à partir de là ), en passant par de la construction de code en "dur" (via la fabrication d'un .sas contenant une macro).bonjour,
[...]j'ai un problème concernant l'utilisation des formules dans une table sas, en effet ma table possède 186000 observation,
je souhaite calculer 5 nouveaux champs, sauf que la formule que je vais utiliser est stocké déjà dans une autre champs comme variable caractère.
exemple:
champ1:
sum(kdc,kve) sachant que dkc est un champ, kve est un champ, et le champ que je veux calculer par exemple est égale a cette formule,
remarque: la formule change dans la table d'une ligne à une autre.
je vous remercie par avance
Je serais curieux de savoir quelles auraient été les autres solutions possibles (sachant qu'attention le fichier est gros donc exit la génération de code spécifique a chaque observation avec du macro code).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 options mprint; data b; a=1;b=1;champ1="sum(a,b)";output; a=1;b=1;champ1="sin(a)";output; a=1;b=1;champ1="a-b*b";output; a=1;b=1;champ1="sin(a)";output; run; filename prog 'z:\autoprog.sas' ; data _null_ ; length champ1 $200 ; file prog; PUT '%MACRO code ;' ; PUT 'select(Champ1);' ; if _n_=1 then do; declare hash champ(dataset:'work.b'); champ.defineKey('champ1'); champ.defineDone(); declare hiter iChamp('champ'); rc = iChamp.first(); do while (rc=0); VAR ='WHEN("'!!STRIP(Champ1)!!'") Champ1_valeur='!!STRIP(Champ1)!!';' ; PUT VAR ; rc = iChamp.next(); end; PUT 'OTHERWISE;' ; PUT 'END;' ; PUT '%MEND;' ; end; RUN; %include "z:\autoprog.sas"; DATA c; set b; %code; run;
Partager