Tengo una variable llamada ID en el conjunto de datos VIEJO, y necesito cambiar la longitud de 13 a 12 para una fusión. A continuación se muestran los metadatos asociados con esta variable.

Variable Type Len Format Informat Label 
ID       Char  13   $12.     $12. 'Person ID'

(El contenido de cada valor para ID siempre tiene exactamente 12 caracteres en este archivo)

Cuando intento editar la longitud antes de la declaración establecida en un paso de DATOS, recibo una advertencia. Lo mismo sucede cuando edito tanto la longitud como el formato.

data NEW;
length ID $12;
format ID $12.;
set OLD;
run;

...
WARNING: Multiple lengths were specified for the variable AN_RESEARCHID by 
             input data set(s). This can cause truncation of data.

Los ejemplos de los foros de la comunidad SAS no parecen describir por qué ocurriría esta advertencia o cómo evitarla. ¿Alguna idea?

0
JMQ 27 dic. 2016 a las 23:22

3 respuestas

La mejor respuesta

Puede cambiar el nombre de la variable original en su instrucción SET y crear una nueva variable con la longitud deseada. Luego establezca la nueva variable igual a la anterior dentro del paso de datos. No recibirás la advertencia. Pero, por supuesto, de lo que le advierte todavía se conserva, es decir, si sus datos tienen 13 caracteres, truncará el valor cuando lo atasque en una variable con una longitud más corta.

data NEW(drop=ID_orig);
length ID $12;
set old(rename=(ID=ID_orig));
ID= ID_orig;
run;
4
Amw 5G 27 dic. 2016 a las 20:42

Hay una opción SAS llamada varlenchk. Al configurarlo temporalmente en NOWARN, puede cambiar las longitudes sin previo aviso.

options varlenchk = nowarn; * Turn off the warning prior to your operation;

/* your operations here */

options varlenchk = warn; * put it back on to be safe!;

Vea este enlace para más detalles:

http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a003269301.htm

3
Dominic Comtois 6 ene. 2017 a las 11:08

La respuesta dada por Amw5G es cómo resolvería este problema si no pudiera corregir la configuración de longitud original de ID. Sin embargo, debe investigar el cambio de la asignación de longitud original en el paso anterior.

Algunas razones por las que una variable recibe una longitud no deseada son:

Si se asigna un VAR de carácter a un valor sin LONGITUD, entonces el VAR tomará la longitud del primer valor asignado. EJEMPLO

Si una función asigna un VAR de caracteres, como SCAN, puede recibir una longitud de 200. El CAT devolverá una longitud de la suma de las longitudes de los valores que se concatenan. EXPLICACIÓN

2
Jay Corbett 28 dic. 2016 a las 16:18