base SAS programming学习笔记13(Array)

1.Array array-name{dimension} <elements>

        array-name:向量名称

        dimension:向量长度,默认为1;

        elements:列出变量名,变量名要么全是数值变量或者全是字符变量

        array-name和variable不能相同;也不能和函数名称相同;

        array的名称不可以在label、format、drop和keep或者length语句中使用。

dimension可以取数值、数值范围或者*

array sales{4} qtr1 qtr2 qtr3 qtr4

array sales{96:99} qtr1-qtr4

array sales{*} qtr1 qtr2 qtr3 qtr4

变量名取值可以变量名、也可以是“-”连接的变量名序列,也可以是_ALL_(所有变量),_NUMERIC_(所有数值变量),_CHARACTER_(所有字符变量)

如:array sales{*} _numeric_;

当读取一行数据放入PDV里面(程序向量),在这行数据里面对array里面的变量值循环做相同的处理。

2.ARRAY 函数 

        dim(array-name):计算向量里面的变量个数

        

3.使用ARRAY 创建新变量

          array  array-name{dimension} <variablename> )

创建新变量,未自定义变量名,变量名默认为array-name后接1,2,.....dimension ;

后接 $ 表示字符型,默认长度为8,可以加上数值表示字符的长度

比如:array firstname{5} $ 24;

举例如下:

也可以自定义variable-name;

给新建的变量赋初值:

        array  array-name {dimension} <variable name> (initial values)

在变量名之后赋初值,初值和变量名一一对应,初值间用空格或逗号隔开,初值用括号括起来;

在向量里面赋值的初值在PDV中会自动从第一行开始予以保留,不清空

如:array goal{4} g1 g2 g3 g4 (9000,9300,9600,9900)

       array col{3} $ color-color3  (“red”,"green","blue")

也可以不设置变量名为向量里面的每个元素赋值

        array var{4} (1 2 3 4),

举例如下:

结果如下:

 如上在ARRAY中定义的变量,会输出至SAS数据集,因此可以用_TEMPORARY_来创建临时变量,临时变量不会出现在SAS数据集中:

4.使用ARRAY创建多维向量

        上述均是用ARRAY创建的一维向量,创建二维向量如下:

        array new{3,4} x1-x12; {r,c}: r表示row,c表示column;

        可以使用new(2,3)来引用向量里面的值;

向量如下:

举例如下:

在每次迭代开始给qtr{i}赋值为0,是为了避免上一个qtr值累积到下一个qtr值;

上述程序执行逻辑如下:

1)SAS在PDV中先根据ARRAY 组织或创建新变量如下:

2)当第一个DO循环i=1时,qtr{1}=0;面对第二个DO循环时,qrt{1}+m{1,1}:

qrt{1}+m{1,2}:

qtr{1}+m{1,3}:

3)结束循环时,PDV如下:

最终结果如下:

4)还可以实现数据转置,横向数据转成纵向数据举例如下:

源数据:

转置后数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/48533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++面试题之判断一个变量是不是指针

对于变量其实对应的就是内存&#xff0c;而内存并没有表明一定是什么数据类型&#xff0c;所以判断变量是否是一个指针其实是一个参数类型匹配问题&#xff0c;在C中支持函数的重载&#xff0c;那么不同的函数因为参数的不同从而匹配不同函数调用过程。 编译器在进行函数匹配调…

JAVA周总结(集合) 0721day

一.Collection集合 集合:可以存放多种类型数据的容器。 集合和数组的区别 数组的长度是固定的,集合的长度根据存储的数据发生改变。 数组只能存同一种类型的数组,而集合可以存多种类型。 1.2 单列集合常用类的继承体系 java.util.List: 添加的元素是有序、可重复 ; Lis…

欢迎来到 Mint Expedition:Web3 和 NFT 的新时代开始

7 月 15 日&#xff0c;Mint Expedition 正式开启&#xff0c;作为 Mint 生态系统的旗舰项目&#xff0c;将彻底变革 Web3 和 NFT 去中心化应用&#xff01; Mint Expedition 是 Mint 的最新航程&#xff0c;延续了 Mint Forest 的成功。Mint Forest 吸引了超过 41.4 万独立用…

PostgreSQL简介和安装

一、Postgresql简介&#xff1a; 1、PostgreSql是功能强大的&#xff0c;开源的关系型数据库&#xff0c;底层基于C语言实现&#xff1b; 2、开源&#xff1a;允许对PostgreSql进行封装&#xff0c;用于商业收费&#xff1b; 3、版本迭代速度快&#xff0c;正式版本已经到15.R…

(day21)leecode hot100字母异位词分组

描述 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "nat&qu…

Log4J reminder

Java JNDI and Log injection https://docs.oracle.com/javase/jndi/tutorial/ See also https://telegra.ph/Log4J-Vulnerability-Explained-07-21

【轻松拿捏】java中为什么要使用克隆?如何实现对象克隆?深拷贝和浅拷贝区别是什么?

java中为什么要使用克隆&#xff1f;如何实现对象克隆&#xff1f;深拷贝和浅拷贝区别是什么&#xff1f; 一、如何在Java中实现对象克隆 1.1 浅拷贝 1.2 深拷贝 1.3 区别总结 二、面试回答技巧 1. 定义克隆及其用途 2. 解释浅拷贝和深拷贝 3. 具体实现浅拷贝和深拷贝 …

ChatGPT:@EnableConfigurationProperties 和 @ConfigurationProperties注解

ChatGPT&#xff1a;EnableConfigurationProperties 和 ConfigurationProperties注解 EnableConfigurationProperties(ServiceProperties.class) ConfigurationProperties(prefix “cestc”) 这两个注解的关系 EnableConfigurationProperties 和 ConfigurationProperties 是 …

c++中 bitset set multiset 的用法

bitset 简介 bitset 是 c 标准库中的一个存储 0/1 的大小不可变的容器。严格来讲&#xff0c;它并不属于 STL。 内存变量为 bool 类型。 #include<bitset> // 头文件bitset<1000> bs; // 定义一个大小为 1000 长度的 bitset 容器&#xff0c;其中 每一位都为fal…

springboot中如果我想每个接口对应redis应该怎么做? 更改的时候只删除对应的缓存?

如果你想为每个接口设置对应的Redis缓存,并且在更改数据时只删除对应的缓存,可以按照以下步骤进行设计和实现: 为每个接口设计唯一的缓存键 为了区分不同接口的缓存,你需要为每个接口设计一个唯一的缓存键。缓存键可以包含接口的名称、参数等信息,以确保唯一性。例如: "sp…

在C#中,如何优化对象的创建和销毁以提高性能?

在C#中&#xff0c;优化对象的创建和销毁可以显著提高应用程序的性能。以下是一些常用的优化策略&#xff1a; 避免不必要的对象创建&#xff1a; 检查代码&#xff0c;避免在循环中创建临时对象。考虑重用对象或使用对象池。 使用值类型&#xff08;ValueType&#xff09;&am…

深度加速器 全面支持国服外服游戏加速

深度加速器现已部署多条高速游戏专线。支持港服&#xff1b;日服、韩服、台服、东南亚服、中东服、美服、澳服、欧服、俄服游戏登录和加速&#xff0c;深度加速器且提供国内外游戏加速功能。 深度IP转换器与深度加速器&#xff1a;两个产品功能有所不同&#xff0c;深度IP转换器…

【Python】使用库 -- 详解

库就是别人已经写好了的代码&#xff0c;可以让我们直接拿来用。 一个编程语言能不能流行起来&#xff0c;一方面取决于语法是否简单方便容易学习&#xff0c;一方面取决于生态是否完备。所谓的 “生态” 指的就是语言是否有足够丰富的库&#xff0c;来应对各种各样的场景。在…

LeetCode 188题: 买卖股票的最佳时机IV优化(原创)

之前完成了LeetCode 188题&#xff1a; 买卖股票的最佳时机IV&#xff08;原创&#xff09;-CSDN博客&#xff0c;虽然完成代码编写&#xff0c;并提交成功&#xff0c;但运行效率还未达到最优的1ms&#xff0c;见下图&#xff1a; 仔细检查代码&#xff0c;感觉还是有可优化的…

OpenCV中的GrabCut图像分割算法的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 功能描述 GrabCut 算法是一种用于图像分割的技术&#xff0c;由 Carsten Rother、Vladimir Kolmogorov 和 Andrew Blake 在 2004 年 SIGGRAPH 会议的论文《…

AI多模态识别ALM大模型分享:Qwen-Audio

ALM (Large Audio Language Model) 1&#xff09;Qwen-Audio 声音音频对话 参考&#xff1a; https://qwen-audio.github.io/Qwen-Audio/ https://huggingface.co/Qwen/Qwen-Audio-Chat “Qwen-Audio 接受多种音频&#xff08;人类语音、自然声音、音乐和歌曲&#xff09;以及…

基于面向对象和递归的拦截器设计模式

1 定义 拦截器模式&#xff08;Interceptor Pattern&#xff09;&#xff0c;是指提供一种通用的扩展机制&#xff0c;可以在业务操作前后提供一些切面的&#xff08;Cross-Cutting&#xff09;的操作。这些切面操作通常是和业务无关的&#xff0c;比如日志记录、性能统计、安…

day2 单机并发缓存

文章目录 1 sync.Mutex2 支持并发读写3 主体结构 Group3.1 回调 Getter3.2 Group 的定义3.3 Group 的 Get 方法 4 测试 本文代码地址&#xff1a; https://gitee.com/lymgoforIT/gee-cache/tree/master/day2-single-node 本文是7天用Go从零实现分布式缓存GeeCache的第二篇。 …

【LeetCode】80.删除有序数组中的重复项II

1. 题目 2. 分析 3. 代码 class Solution:def removeDuplicates(self, nums: List[int]) -> int:if len(nums) < 3:return len(nums)i 0j 1k 2while(k < len(nums)):if (nums[i] nums[j]):while(k < len(nums) and nums[j] nums[k] ):k1if (k < len(nums…

校验deb、rpm、apt、yum安装文件完整性测试

简介&#xff1a;deb包在Linux操作系统中类似于windows中的软件包&#xff08;msi&#xff09;&#xff0c;几乎不需要什么复杂的编译即可通过鼠标点击安装使用。此外,deb广泛应用于越狱后iOS软件及MeeGo&#xff08;含Maemo软件&#xff09;中。deb 格式是 Debian 系统(包含 D…