SAS编程基础(5)

2020-04-03 11:35

array-elements:规定数组元素的名称,一个元素即为一个变量 initial-value-list:数组元素的初值

ARRAY在Sas中其实是一个变量指针,占用内存的空间为4字节。ARRAY可以把无序的变量名统一。

如:array rain{5} x1-x5; Array ar(3);/*ar1,ar2,ar3*/ Array ar(1:3);

ARRAY X{1:5,1:3} score1-score15; Array ab(*) x y z;

Array x[*] _numeric_;/*可用于数据集数据结构发生变化的情况*/ Array x _character_;/*可用于数据集数据结构发生变化的情况*/

Array test(3) _temporary_ (90 80 70);/*临时数组的值总是被自动保存,其功能相当于RETAIN语句*/

Array days{7} d1-d7 (1,2,3,4,5,6,7);

数组函数:

Array mult{2:6,4:13,2} mult1-mult100; Dim(mult) (=5,相当于DIM1(mult))

Dim2(mult)=10; dim3(mult)=2; dim2(mult)等价于dim(mult,2) Lbound(mult) 等价于lbound(mult,1),返回值为2 Lbound2(mult)等价于lbound(mult,2),返回值为4; Hbound2(mult)等价于hbound(mult,2),返回值为13;

4.4.2实例 缺失值填充:

data missing; input x y$ z$ m; cards; . . . 1 2 . 3 . ; run;

data result; set missing;

array char _character_;/*针对所有字符型变量*/ array numr _numeric_;/*针对所有数值型变量*/

do over char; /*这个循环是针对数组而言的特设循环*/ if char eq \ then char=\; end;

do over numr;

if numr eq . then numr=0; end; run;

统计所有课程都及格的人数

data score; input id$ x y z; cards; a 75 84 65 b 54 74 71 c 51 56 52 d 50 50 60 ; run;

data qualify; set score; k=0;

array chengji(3) x y z;

array base(3)_temporary_(60,60,60); do i=1 to 3;

if chengji(i) ge base(i) then k+1; end;

if k=3 then output qualify; run;

统计选择题回答正确题数

data single;

input id$ q1$ q2$ q3$@@; cards;

01 a b c 02 a b a 03 b a c 04 a b c ; run;

data correct(drop=i); k=0; set single; array q(3);

array crt(3) $_temporary_('a','b','c');/*正确的题号为a,b,c*/ do i=1 to 3;

if q(i)=crt(i) then k+1; end; run;

横向排序变量

data a; input x1-x7; cards;

23 44 81 13 42 34 26 14 18 10 20 33 11 50 ; run;

data final; set a;

array arr(1:7) x:; array copy(1:7) cx1-cx7; do m=1 to dim(arr); copy(m)=arr(m); end;

do i=1 to dim(copy); do j=i+1 to dim(copy);

if copy(j)>copy(i) then do;

temp=copy(j);copy(j)=copy(i);copy(i)=temp; end; end; end; run;

删除缺失值比例超过70%的变量列表

options symbolgen; data missing;

input n1 n2 n3 n4 n5 n6 n7 n8 c1$ c2$ c3$ c4$; datalines;

1 . 1 . 1 . 1 4 a . c . 1 1 . . 2 . . 5 e . g h 1 . 1 . 3 . . 6 . . k l 1 . . . . . . . a b c d ;

N2,n4,n6,n7,c2的缺失比例超过了70%。

data _null_;/*整个程序在编译阶段完成*/ if 0 then

set missing nobs=obs;

array num_vars[*] _NUMERIC_; array char_vars[*] _CHARACTER_;

call symputx('num_qty', dim(num_vars));/*在DATA步中传递宏变量*/ call symputx('char_qty', dim(char_vars)); call symputx('m_obs',obs); stop; run;

%put &num_qty &char_qty &m_obs;/*在LOG窗里显示结果*/ data _null_;

set missing end=finished; array num_vars[*] _NUMERIC_;

array char_vars[*] _CHARACTER_;

array num_miss [&num_qty] (&num_qty * 0); array char_miss [&char_qty] (&char_qty * 0); length list $ 50; do i=1 to dim(num_vars);

if num_vars(i) eq . then num_miss(i)+1; end;/*数组变量值具有retain的特点*/ do i=1 to dim(char_vars);

if char_vars(i) eq '' then char_miss(i)+1; end;

if finished then do; do i= 1 to dim(num_vars);

if num_miss(i)/&m_obs. ge 0.7 then list=trim(list)||'

'||trim(vname(num_vars(i)));/* vname(num_vars(i))返回数组对应的变量名*/ end;

do i= 1 to dim(char_vars);

if char_miss(i)/&m_obs. ge 0.7 then list=trim(list)||' '||trim(vname(char_vars(i))); end;

call symputx('mlist',list); end; run;

%put &mlist; data notmiss;

set missing(drop=&mlist); run;

4.5其他语句

4.5.1RENAME语句

格式:RENAME old_name=new_name;

注:rename与keep/drop语句同时出现时,keep/drop语句先于rename语句执行,不管顺序。

4.5.2LENGTH语句

Length 变量名<$> 长度;


SAS编程基础(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《物理化学》高等教育出版(第五版)第十一章电 极 极 化

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: