SAS编程习题(29)
(2014-07-10 22:40:48)
标签:
sas日期型变量vtype |
分类: SAS笔记 |
在做日期型的数据的处理过程中,可能会碰到这种情况:数据中日期型变量比较多,不可能一一写出来,同时日期变量名不连续,比方说date1-date400或者a-k这种情况也不出现的情况下,如何统一处理这类日期型变量呢?
假如要对所有日期变量做修改,使日期变量改到只保留年份。
data a;
input date1 date3 date4 id $ dt;
informat date1 date3 date4 ddmmyy8.;
format date1 date3 date4 ddmmyy8.;
cards;
01/02/03 03/08/10 23/09/11 A 3
;
run;
在上述数据中,date1、date3、date4是不连续的日期型变量,同时数据中存在另外一个数值型变量dt和一个字符型变量id。
data b;
set a;
array array{*} _numeric_;
array k{1000} _temporary_;
do i=1 to dim(array);
if array(i)>100 then do;
k(i)=year(array(i));
array(i)=k(i);
end;
end;
format _numeric_ 8.;
drop i;
run;
通过上述处理方式可以得到想要的数据,但是很多情况下,数据非常复杂,不可能出现上述”if array(i)>100 then do“这种简单格外分明的数据,在这种情况下条件语句就得自己酌情考虑了。
所以说难点在于对日期型变量的判断,由于SAS中似乎并没有对日期型变量的判断函数,只有对数值型和字符型变量的判断函数vtype(),vtype()函数返回‘N’或者‘C’来表示numeric或者character,举个例子:
data _null_;
a=1;
b='c';
a1=vtype(a);
b1=vtype(b);
put a1= b1=;
run;
结果为:
a1=N b1=C