2011-02-20 30 views

Respuesta

9

En primer lugar, no está claro si está hablando de la declaración rename en proc datasets o en el paso de datos. Si no necesita hacer nada más con los datos, definitivamente debe usar conjuntos de datos proc para hacerlo, porque de lo contrario (en un paso de datos) está leyendo/escribiendo innecesariamente cada registro en el conjunto de datos, solo para alterar los nombres de las variables .

Si son mediante el paso de datos, sólo tiene que utilizar

rename col1-col15=new1-new15; 

No estoy seguro de si se puede usar ese acceso directo en conjuntos de datos proc. Lo que nos lleva a tu pregunta de bucle. A menos que esté haciendo esto muchas veces o dinámicamente, probablemente sea tan fácil copiar y pegar el código 15 veces. He aquí una manera de generar la declaración que usted quiere, lo puso en una variable macro, y utilizar esa variable macro en la declaración de cambio de nombre:

data _null_; 
    length myVar $ 1000; 
    *myVar=''; 
    do i=1 to 15; 
    myVar=catx(' ',myVar,' ',cats('col',i,'=','new',i)); 
    end; 
    call symput('rename',myVar); 
run; 

%put &rename; 

proc datasets library=mylibrary; 
    modify mydataset; 
    rename &rename; 
run; 
3

Aquí hay una manera de hacerlo en el caso de que los nombres de las variables se ajustan a un buen , fácil patrón de nomenclatura:

DATA out; 
SET in; 
ARRAY oldnames (15) col1-col15; 
ARRAY newnames (15) new1-new15; 
DO i = 1 TO 15; 
     newnames(i) = oldnames(i) ; 
END; 
RUN; 

O, más genéricamente:

DATA out; 
SET in; 
ARRAY oldnames (4) abc def ghi jkl ; 
ARRAY newnames (4) mno pqr stu vwx ; 
DO i = 1 TO 4; 
     newnames(i) = oldnames(i) ; 
END; 
RUN; 
+0

se necesitaría añadir una sentencia de descarte, de lo contrario sólo estás añadiendo las variables new1-nuevos15. –

Cuestiones relacionadas