如果一个变量a被设定了format,那么我们点开数据集看到的并不是这个变量本身的值,而是format的值。如果我们想用另一个变量b保存下来这个format的值,那么直接b=a是不行的,有两种方式,一种是
b=vvalue(a);
b=putc(a,vformat(a));(如果是数值型用putn)
具体例子如下:
第一种 使用vvalue函数:
在一个数据集ie中有ieyn这个变量,可以看到这个函数有两个值,Y或N;
我们使用如下语句选择数据,发现是没有任何记录选择出来的。
查看这个变量,发现这个变量定义了输出格式format,所以这个Y或N并不是这个变量真正的值。
我们使用下面这段话将ieyn赋值给a,可以看到a只继承了ieyn的变量类型和长度,并没有继承其输入格式和输出格式,所以Y的真正的值是C49488,而N的值是C49487。
用这个format语句也可以去除ieyn的format格式(同理informat语句可以清除informat格式)。
那么我们想筛选出ieyn为Y的记录可以使用如下两种方法:
一般都是使用vvalue函数的,毕竟我们并没有必要多此一步去查这个变量的真实值。
从这个结果上我们也可以倒推$NYNA1这个format的定义:
proc format;
value $nyna1
"C49487"="N"
"C49488"="Y" ;
run;
第二种 使用putc\putn函数:
formatted-val=PUTC(char-val,format);
formatted-val=PUTN(num-val,format);
需要注意的是:点符号不能与PUTC或PUTN函数一起使用。为了允许正确解析char-val和num-val参数,这个限制是必要的。
有关使用格式返回值的更多信息,请参见SAS函数和CALL例程:参考中的PUT函数。
plpeipde变量的真实的值是a;format是b,保留的format值是c和d