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;

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐