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

本文共 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

你可能感兴趣的文章
Webrtc入门——基于阿里云ubuntu 最新webrtc Android平台编译详细说明
查看>>
贴一份用delphi修改注册表改网卡MAC地址的代码
查看>>
Deep Learning(深度学习)学习笔记整理系列之(三)
查看>>
网页布局之Div vs Table (2)
查看>>
可变参数列表
查看>>
BouncyCastle.Crypto的RSA算法调用源码
查看>>
vs2017 + Python3.6 +Django1.11 连接mysql数据库
查看>>
一张思维导图带你梳理HashMap相关知识
查看>>
MVC 从Excel导入到DataTable
查看>>
Symbol
查看>>
Selenium WebDriver + IE11 问题汇总
查看>>
Oracle数据库设置Scott登录
查看>>
IOS开发之UIScrollVIew运用
查看>>
iOS 基础-----关于UIView 的 frame 与 bounds
查看>>
ISO GPS定位,坐标转换以及如何显示
查看>>
深入理解Java:类加载机制及反射
查看>>
Use a PowerShell Module to Easily Export Excel Data to CSV
查看>>
Redis清理
查看>>
读书笔记—CLR via C#章节8-10
查看>>
洛谷 3804 【模板】后缀自动机
查看>>