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