首页 > 解决方案 > SAS Proc SQL 字符串截断问题

问题描述

从下面另一个表中的值创建一个简单的表:

create table summary3 as
    select 
        substr(&Start_dt.,1,4) as time_range, 
        NFDPs ,
        NFDPExceeds,
        NblkExceeds,
        NFDPExceedsLT30s as NFDPExceedsLT30,
        NReports as Nbr_report ,
        prcnt_FDP_ext ,
        prcnt_blk_ext , 
        prcnt_extLT30 as prcnt_ext_LT30,
        prcnt_report,
        monotonic() as id
    from OAP_exceedances_by_year;

我的问题出现在我创建的第一列,time_range. 当我稍后尝试向该表添加值时,我注意到该列被限制为长度为 4 或更短的字符,并且它会自动截断任何更大的值。有没有办法可以更改第一条语句,或者我未来的插入/设置语句以避免截断?IE 我仍然希望第一行只有 4 个字符,但我可能需要未来的行更多。

谢谢!

标签: sqlsas

解决方案


这取决于您如何进行未来的处理。如果您的数据稍后说明

data summary_final;
  set summary3;
  time_range = "ABCDEF";
run;

然后你可以像这样改变它:

data summary_final;
  length time_Range $6;
  set summary3;
  time_range = "ABCDEF";
run;

但是你当然也可以在最初的拉动中做你所说的。例如...

proc sql;
  create table namestr as 
  select substr(name,1,4) as namestr length=8
  from sashelp.class;
quit;

namestr即使其中包含 substr(1,4) ,也会创建为 length=8 ;那里的名称将按照要求被截断,substr但未来的名称将被允许为 8 长。


推荐阅读