博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sas数组,数组的语法与一些特殊定义,获取维度大小
阅读量:6910 次
发布时间:2019-06-27

本文共 2793 字,大约阅读时间需要 9 分钟。

ARRAY { } <> <<> <()> ; 

subscript:下标的三种形式

{5,1}5行1列

{1:5,1:2}5行2列

{*}通过计算array的variable的数量来获得参数,*不能与_temporary_连用,在定义多维数组的时候也不可用

 

array-elements:组成数组的元素的变量名

默认情况下是数组名+序号,但是也可以自己设定(注意是变量的名字,设定好后可以参与运算的那种),还可以有一下四种形式

_ALL_ specifies all variables,If you use _ALL_, all the previously defined variables must be of the same type

_NUMERIC_ specifies all numeric variables.

_CHARACTER_ specifies all character variables.

_TEMPORARY_creates a list of temporary data elements. 

initial-value-list:初始化列表

可以用逗号或者空格分隔,他们的类型要一致

可以用这种形式简化要输入的数据<constant-iter-value*> <(>constant value | constant-sublist<)> ,记住前面重复数后面才是要重复的数据

ARRAY x{10} x1-x10 (10*5);
ARRAY x{10} x1-x10 (5*(5 5));
ARRAY x{10} x1-x10 (5 5 3*(5 5) 5 5);
ARRAY x{10} x1-x10 (2*(5 5) 5 5 2*(5 5));
ARRAY x{10} x1-x10 (2*(5 2*(5 5)));

 

一些比较特殊的数组的定义

data;    a = 2;    b = 3;    c ='c';    array me{
*} _numeric_; /*结果只能输出前两个,这个数组起到的作用是接受定义在他前面的所有数值变量的值,不会接受其他值*/ put me(1)= me(2)= me(3)=;run;
data;    array new{
2:5} green jacobs denato fetzer(5 6 7 8);/*这里的第一个下标是从2开始到5,所以new(2)会输出5,而不是6*/ put new(2)=; run;

 

临时数组应注意的几点:

1:临时数组的变量没有名字,使用时要用数组名加下标,比如test(1)。

2:不能出现在输出的数据集上,不是临时数组创建的变量会出现在数据集上。

3:不能用特殊下标(*)来引用所有元素

4:数组元素被自动保存,每轮data步不会被置为缺失

临时数组的优点

5:使用临时数组可以少占用内存,加快执行时间。

 

获取数组维度的函数,比如 array mult{3,4,5}   ,分别获取三个维度的大小的函数dim(mult,1) dim(mult,2) dim(mult,3)

对于只有一维的数组,直接用dim(array name)即可

对数组值的重复初始化

ARRAY x{10} x1-x10 (10*5);

ARRAY x{10} x1-x10 (5*(5 5));
ARRAY x{10} x1-x10 (5 5 3*(5 5) 5 5);
ARRAY x{10} x1-x10 (2*(5 5) 5 5 2*(5 5));
ARRAY x{10} x1-x10 (2*(5 2*(5 5)));

 
data temp;    input x@@;    cards;    10 20 30    ;run;data test (drop=i); (使用drop选项比drop语句划算)    set temp;    array a(5) a1-a5; *是声明语句,不会执行;    do i=1 to 5;        a(i)=i;    end;run;proc print noobs data=test; *打印出来,不带观测值序号,数据集为test;run;
data missing;    input x y$ z$ m;    cards;    . . . 1    2 . 3 .    ;run;data result;    set missing;    array char _character_; *set一次进入pdv四个变量,两个字符型,两个数值型,这里的意思是获取所有字符型变量形成一个字符型数组;    array numr _numeric_; *这里是获取所有数值型变量形成数值型数组;    do over char;        if char eq "" then char="null";        put "char"; *这里会输出两次,因为四个变量中有两个位字符型,如果你修改读取数据集中字符型和数值型的个数,这里输出的次数也自然会不同;    end;    do over numr;        if numr eq . then numr=0;        put "numr"; *这里会输出两次,因为四个变量中有两个为数值型;    end;run;

 

*输出三科成绩全部及格的人的id以及成绩; 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 res(drop=k);    set score;    k=0;  *对于这种要判断多个变量的值是否满足某个条件的程序最好都设置一个计数变量,并且在每轮循环之前都有一个清空操作;    array numr _numeric_;    do over numr;        if numr >= 60 then k=k+1;  *这里判断的全都是及格的,如果要判断的数不相同,比如有一门大于60有一门大于65,则应该设置一个数组来取下标进行判断;    end;    if k>2 then output; *这里只有单个数据集所以output后面没加数据集的名字,对多个数据集必须加上;run;proc print noobs data=res;

 

转载于:https://www.cnblogs.com/yican/p/3806563.html

你可能感兴趣的文章
【Android】第18章 位置服务和手机定位—本章示例主界面
查看>>
如何让 protected internal 跨程序集!
查看>>
结对编程作业总结2
查看>>
2018-2019-1 20165231 《信息安全系统设计基础》第七周学习总结
查看>>
转 10 个最佳的 Node.js 的 MVC 框架
查看>>
Linux学习笔记(六)-Linux服务程序的安装和卸载
查看>>
转 @JoinColumn 详解
查看>>
mysql 主从复制
查看>>
详解C/C++预处理器
查看>>
阿里云OSS图片上传plupload.js结合jq-weui 图片上传的插件
查看>>
随机产生id字符串
查看>>
(十七)SpringBoot之使用异步消息服务jms之ActiveMQ
查看>>
第19讲 | 上手搭建一条自己的智能合约
查看>>
Matlab绘制空间几何图
查看>>
在Node.js上搭建React.js开发环境
查看>>
常州大学新生寒假训练会试 题解
查看>>
ASCII,Unicode和UTF-8
查看>>
性能指标术语&理发店模型
查看>>
【几个关于CSS的网站】
查看>>
【转】python 2.6.6升级到python 2.7.x版本的方法
查看>>