Si j'ai une variable numérique avec un format, il existe un moyen d'obtenir la valeur formatée en tant que variable de caractères?
E.g. Je voudrais écrire quelque chose comme ce qui suit pour imprimer 10/06/2009 code> à l'écran mais il n'y a pas de
Puformatté () code> fonction. P>
data test;
format i ddmmyy10.;
i = "10JUN2009"d;
run;
data _null_;
set test;
i_formatted = putformatted(i); /* How should I write this? */
put i_formatted;
run;
5 Réponses :
Je peux le faire avec le code de macro et sashelp.vcolumn code> mais c'est un peu fidèle.
proc sql noprint;
select trim(left(format)) into :format
from sashelp.vcolumn
where libname eq 'WORK' and memname eq 'TEST';
run;
data test2;
set test;
i_formatted = put(i, &format);
put i_formatted;
run;
@Chang Chung Je sais que c'est une vieille question, mais j'ai été redirigé ici. Y a-t-il une raison pour laquelle vous préférez cette solution sur la solution de CMJOHNS? @Simon Même question à vous: pourquoi appelez-vous cela un peu fidèle? N'est-ce pas 100% stable?
@YOHSOOG: Cela fonctionne, et il est stable. J'espérais juste qu'il y avait un moyen de le faire sans regarder dans Sashelp.vcolumn.
Cela semblait travailler pour un couple que j'ai essayé. J'ai utilisé Varfmt et une fonction macro pour récupérer le format de la variable donnée.
i_formatted=10/06/2009 b_formatted=123,405,321
+1, et j'accepte cette réponse car elle est considérablement plus rapide que Putn (i, Vormat (I)). Pour 10 millions d'observations, cette méthode a pris 10 secondes, contre 65 secondes.
Utiliser vformat () code> fonction.
/* test data */
data test;
i = "10jun2009"d;
format i ddmmyy10.;
run;
/* print out the value using the associated format */
data _null_;
set test;
i_formatted = putn(i, vformat(i));
put i_formatted=;
run;
/* on log
i_formatted=10/06/2099
*/
+1 J'aime cela et je ne savais pas à propos de Putn () ou de Vormat () avant maintenant, mais j'accepte la réponse de CMJohns pour des raisons de performance.
Oui, il existe une fonction Puformated (). En fait, il y a deux: Putc () et Putn (). Putc traite des formats de caractères, Putn () numérique. Votre code devra examiner le nom du format (tout et seul les formats de caractères commencent par «$») déterminent qui à utiliser. Voici la syntaxe de PutC (à partir de l'aide interactive): arguments p>
Mais je dois fournir le format: le point de la question était de savoir s'il y avait un moyen de formater avec le format actuel de la variable.
Le tandis que la solution CMJohns est légèrement plus rapide que ce code, ce code est plus simple car il n'y a pas de macros impliqués. P> < / p> vvalue code >
Fonction Formats La variable est transmise à celle-ci à l'aide du format associé à la variable. Voici le code utilisant vvalue code>: