2013-08-16 4 views
3

J'ai reçu plusieurs fichiers de jeu de données SAS avec l'extension .sas7bdat. J'utilise SAS 9.3 sur Windows, et le créateur de ces fichiers utilisait évidemment un environnement et/ou un logiciel différent. La plupart des fichiers ont des noms de var qui incluent des espaces et d'autres caractères non valides. Même l'exécution d'un proc contents déclenche une erreur comme ceci:sas7bdat avec des espaces dans les noms de variables

ERROR: The value Person ID is not a valid SAS name. 

Bizarrement, SAS Enterprise Guide ouvre et affiche le fichier sans se plaindre.

Comment est-ce que je peux renommer efficacement tous mes mauvais noms de var afin que je puisse commencer à exécuter des programmes réels avec ces fichiers?

Répondre

4

En plus de option validvarname=ANY; vous devez également référencer les noms de variables comme nom littéraux: 'Person ID'n (simples ou doubles sont très bien).

Si vous souhaitez renommer efficacement tous, vous pouvez faire quelque chose comme ceci:

options validvarname=any; 
data have; 
'Hello Var'n = 1; 
'Another Var'n = 2; 
x=3; 
run; 

data badvarnames; 
set sashelp.vcolumn; 
where libname='WORK' and memname='HAVE' and not nvalid(name,'v7'); 
validname = translate(trim(name),'_',' '); 
name = cats("'",name,"'n"); 
run; 

proc sql; 
select catx(' ','rename',name,'=',validname,';') into :renamelist 
separated by ' ' from badvarnames; 
quit; 

proc datasets lib=work; 
modify have; 
&renamelist; 
quit; 

proc contents data=have; 
run; 

Selon d'autres détails (comme la possibilité que cela pourrait créer chevauchement des noms de variables), vous devrez peut-être ajuster le code pour ces préoccupations.

+0

+1 pour la fonction nvalid! –

+0

C'est vraiment sympa. Vous obtenez beaucoup de choses de niveau "macro" sans% votre% programme% entier% regardant% comme ceci. – Jeff

1

Je ne pense pas que ce soit une version OS/SAS différente. Je pense que vous devrez peut-être soumettre les documents suivants

options validvarname = ANY; 
+0

Merci pour votre réponse rapide! – Jeff

Questions connexes