String 从SAS中的术语代码/操作日期字符串创建年份

String 从SAS中的术语代码/操作日期字符串创建年份,string,date,sas,String,Date,Sas,我正在将术语代码转换为年份值。所以我有类似于..的术语代码 data terms ; input term_code $; cards; 199900 199910 199920 200000 200010 200020 200100 200110 200120 201000 201010 ; run; 我可以用下面的代码把它们转换成我想要的 data terms_Year ; set terms ; if(Substr ( Term_Code, 1, 4 ) >= '2010

我正在将术语代码转换为年份值。所以我有类似于..的术语代码

data terms ; 
input term_code $; 
cards;
199900
199910
199920
200000
200010
200020
200100
200110
200120
201000
201010
; 
run;
我可以用下面的代码把它们转换成我想要的

data terms_Year ; set terms ; 

if(Substr ( Term_Code, 1, 4 ) >= '2010')
   then Year = Substr ( Term_Code, 1, 4 ) || '-1' || ( 1  *  Substr ( Term_Code, 4,1 ) + 1 );
else if(Substr ( Term_Code, 1, 4 ) >= '2009')
   then year = Substr ( Term_Code, 1, 4 ) || '-'  || ( 1  *  Substr ( Term_Code, 4,1 ) + 1 );
else if(Substr ( Term_Code, 1, 4 ) >= '2000')
   then year = Substr ( Term_Code, 1, 4 ) || '-0' || ( 1  *  Substr ( Term_Code, 4,1 ) + 1 );
else if(Substr ( Term_Code, 1, 4 ) =  '1999')
   then year = Substr ( Term_Code, 1, 4 ) || '-00';
else    year = Substr ( Term_Code, 1, 4 ) || '-'  ||  ( 1  *  Substr ( Term_Code, 3,2 ) + 1 );
        year = compress(year,,'s');
;
run;

proc print data=terms_year ; run; 

这是令人满意的,但我不禁好奇,一个资深的SAS程序员会如何解决这样的问题。谢谢您的时间。

我想这是一个更具可读性且足够简单的选择。不是我想的那种格式/信息。。创建/删除变量有点烦人

data terms_Year ; set terms ; 
drop year_0 year_1 ; 

if(Substr ( Term_Code, 1, 4 ) >= '2010')
   then Year = Substr ( Term_Code, 1, 4 ) || '-1' || ( 1  *  Substr ( Term_Code, 4,1 ) + 1 );
else if(Substr ( Term_Code, 1, 4 ) >= '2009')
   then year = Substr ( Term_Code, 1, 4 ) || '-'  || ( 1  *  Substr ( Term_Code, 4,1 ) + 1 );
else if(Substr ( Term_Code, 1, 4 ) >= '2000')
   then year = Substr ( Term_Code, 1, 4 ) || '-0' || ( 1  *  Substr ( Term_Code, 4,1 ) + 1 );
else if(Substr ( Term_Code, 1, 4 ) =  '1999')
   then year = Substr ( Term_Code, 1, 4 ) || '-00';
else    year = Substr ( Term_Code, 1, 4 ) || '-'  ||  ( 1  *  Substr ( Term_Code, 3,2 ) + 1 );
        year = compress(year,,'s');

year_0 = compress(substr(term_code,1,4)); 
year_1 = compress(year_0 + 1 );
year_also = catx('-',year_0, substr(year_1,3,2));
;
run;

proc print data=terms_year ; run; 

改用一些函数,因为年份似乎是前4个字符,所以您只需添加1即可获得第二个年份,并将其截断即可获得最后两个字符

data terms_Year ; 
    set terms ; 
    year2=input(substr(year,1, 4), 4.);
    Year_want=catx("-", put(year2, 4. -l), substr(put(year2+1, 4. -l), 3));
run;

请检查并考虑在那里发布这个问题,因为您的代码实际上是有效的。我发现发布一个示例来说明您希望输出和代码是什么样的很有用。这样做可以更快地提出建议。