*--------------------------------------------;
* Original Dataset
*
* x has a length of 20 here;
*--------------------------------------------;
data test1;
length x $20;
input x $;
datalines;
abc
def
ghi
jkl
;
run;
proc contents data=test1;
run;
*------------------------------------------------------------------------;
* Change the length of y to 3;
*------------------------------------------------------------------------;
*------------------------------------------------------------------------;
* Solution 1 : length statement;
*
* This solution creates a warning if the new length is shorted than the old one;
*
* WARNING: Multiple lengths were specified for the variable x;
* by input data set(s). This can cause truncation of data.;
*
* The order of the variables is affected
* if the updated variable is not the first variable and
* no other variable is listed before the set statement; *------------------------------------------------------------------------;
data test2;
length x $3;
set test1;
run;
proc contents data=test2;
run;
*------------------------------------------------------------------------;
* Solution 2: options varlenchk=nowarn;
*
* This solution can be considered if no truncation is expected;
*
* The order of the variables is affected
* if the updated variable is not the first variable and
* no other variable is listed before the set statement; *------------------------------------------------------------------------;
options varlenchk=nowarn;
data test3;
length x $3;
set test1;
run;
options varlenchk=warn;
proc contents data=test3;
run;
*------------------------------------------------------------------------;
* Solution 3 - Preferred Solution
* (but when reducing the length of the variable,
* check the length of the values
* if you are not sure about them
* to avoid unexpected truncation)
*
* This solution won't create any warning even if truncation are occurring;
*
* The order of the variables is not affected; *------------------------------------------------------------------------;
proc sql;
alter table test1
modify x char(3);
quit;
proc contents data=test1;
run;
We thank Véronique Bourcier from xxformat.com for his comment about the warning created by solution 1 and for his
solution 2 and 3 to avoid the warning.
