SAS 基础(4):如何产生新变量
如何产生新变量4.1 利用表达式或函数产生新变量4.1 利用表达式或函数产生新变量格式: 变量名 = 表达式或函数新变量一定要写在 input 与 crads,比较运算符结果为真输出1,假为0;日期常量固定写法 “日月年“d的格式,月是英文的前三个字母,例如:“02apr2020”d。...
如何产生新变量
4.0 指定新变量的长度与类型
用 length 指定新变量的长度与类型。
length 变量1 < $ > 长度1 变量2 < $ > 长度2 …;
数据型变量长度 3~8,字符型变量长度 1~32767
data lx;
input id lx$;
length lx2 $16.;
if lx ="无效" then lx2="无效";
else lx2="有效+显效+治愈";
cards;
1 有效
2 显效
3 无效
4 治愈
;
proc print ;
run;

在SAS中,定义 字符变量的长度是由第一个遇到的值得长度决定的,而且长度一旦确定不能改变。length语句一定要在新变量产生之前设定好,否则
例如:
data lx;
input id lx$;
if lx ="无效" then lx2="无效";
/*
lx2第一次确定长度为‘无效’4个字节,所以后面的就被截取掉了,当设定length 长度16 则不会。
*/
else lx2="有效+显效+治愈";
cards;
1 有效
2 显效
3 无效
4 治愈
;
proc print ;
run;

.
4.1 利用表达式或函数产生新变量
格式: 变量名 = 表达式或函数
新变量一定要写在 input 与 crads,比较运算符结果为真输出1,假为0;
日期常量固定写法 “日月年“d的格式,月是英文的前三个字母,例如:“02apr2020”d。
data a;
input wt ht;
bim = wt/(ht/100)**2;
rbim = sqrt(bim);
obseity = (bim>=28);
city="东莞"; /* city date 是常量 */
date = "10apr2020"d;
format date yymmdd10.;
cards;
60 170
55 136
73 166
;
proc print;
run;

.
4.2利用if - then 语句产生新变量
if 表达式 then 新变量 = ;
else 新变量 = ;
data lx;
input id lx$;
lx1 = lx in ("有效","显效","治愈");
if lx in ("有效","显效","治愈") then lx2="有效";
else lx2="无效";
cards;
1 有效
2 显效
3 无效
4 治愈
;
proc print ;
run;

相比较用运算符的表达式产生新变量的简单,if 语句产生新变量更加灵活。
.
4.3 利用retain语句和累加语句产生新变量
retain语句与累加语句都可以让SAS留住上次车记忆,不再重新读取,因为SAS语句再返回data语句时,会进行新一轮的读取,之前数据会刷新掉。
retain 变量 <初始值>; retain a 21 ; (指定的a 初始值21)
data a1;
/* retain a 22; */
a=0;
a=a+1;
input w h;
cards;
60 170
55 166
;
proc print;
run;

data a1;
retain a 0;
a=a+1;
input w h;
cards;
60 170
55 166
;
proc print;
run;

累加语句格式: 变量+表达式,默认变量值0。
data a1;
count+1;
input w h;
cards;
60 170
55 166
66 123
;
proc print;
run;

retain 和累加语句 都是把上次的值保留到下一轮,达到累加的效果。
.
4.4 利用do循环语句产生新变量
do 变量 = 初始值 to 最终值 <by 增加量(1,2,4) >;
SAS语句;
end ;
do i = 1 to 10;
do i = 1 to 10 by 2; 增量为2 得出 1,3,5,7,9
do i = “JAN”,“FEB”,“MAR”;
data a1;
input count time;
cards;
1 23
2 29
3 59
4 87
5 99
;
run;

data a1;
do count=1 to 5;
input time;
output; /* do 必须要加 output,不然会只读最后一个值 */
end; /* 没加end SAS找不到循环结束的标志 */
cards;
23
29
59
87
99
;
proc print;
run;

更多推荐


所有评论(0)