Length and format are two different characteristics of your variable named X. Just because you have set the length of X to be $200, the format of X has not been set, so SAS guesses at what you want, and in this case it guesses wrong. If you set the format in PROC REPORT, the problem goes away.
proc report data=xxx;
columns x;
define x/format=$200.;
run;
or, an alternative solution, with PROC REPORT unchanged from your original code
data xxx;
length x $200;
format x $200.;
x = '-1'; output;
x = '-10'; output;
x = '-100'; output;
x = '-10'; output;
x = '-1'; output;
run;
PS: maybe I'm going off on a tangent here, but storing numerical values as text strings is generally a problematic thing to do, while storing numerical values as numbers is highly recommended, and also solves the problem.
data xxx;
x = -1; output;
x = -10; output;
x = -100; output;
x = -10; output;
x = -1; output;
run;
ods excel file="&workpath.\XXX.xlsx" style=Plateau;
ods excel options (sheet_name="XXX" tab_color="white" flow="tables");
/* Even simpler would be to use PROC PRINT here */
proc report data=xxx;
columns x;
define x/display;
run;
ods excel close;
libname prvfndgs xlsx "&workpath.\XXX.xlsx";
data yyy;
set prvfndgs.XXX;
run;
... View more