搬运工 set

本文深入解析SAS中SET语句的功能与应用,包括如何从一个或多个数据集读取观测,创建新数据集,以及利用指示变量如END、POINT、NOBS等进行数据筛选与处理。通过实例演示SET语句在数据搬运、观测选择及排序中的作用。

set:Reads an observation from one or more SAS data sets。从一个存在在sas逻辑库中的数据集读取数据。

*单个数据集;

*--------创建一个数据集a,数据来源于sashelp数据库中的class数据集;
data a;*新的数据集a,数据来源于存在sas逻辑库sashelp中的class数据集。
set sashelp.class;*引用方式 逻辑库名.数据集名;
run;

set语句把存在的数据集搬到别的数据集中去。而搬过程就是sas的安检过程。class里边的每一条观测度通过安检被放到数据集a里边,一条接一条。同时,这一过程就允许我们对数据集进行一些可行的操作。

第一个关于一些指示变量(临时变量):end 、point、nobs、first.var、last.var;(临时变量会存在安检过程,但不是出现在数据集中如果需要,则需要进行赋值)

*使用end选项,标识最后一条观测,如果是最后一条则a为1,否则为0;
data a;
set sashelp.class end = a;*a为安检过程给每个观测贴的一个标签,并且要理解标识a是一些数,不是变量;
x1 = a;*要想在数据集中看到a的具体情况,可以将a赋值给一个变量,x1;
run;
proc print data = a;
run;
*---point 指示我想要把数据集的哪几条观测放到新的数据集中去,point = variable而不是point = 1,
*同时一般不与where,by等语句一起使用:
data b;
do n = 1 to 10 by 2;*n去1,3,5,7,9;
set sashelp.class point = n;*只读第1,3,5,7,9条观测;
x3 = n;
output;
end;
stop;*防止无限循环:
run;
*--nobs 记录着一共有多少条观测,一般会使用call symput创建宏变量;
data b;
set sashelp.class nobs = n;
put n = ;*使用put语句直接把n的结果在log中展示;
run;

对于一些比较乱的数据,我们希望它按照一定的顺序进行排列输出,这个时候可用by语句,在数据是有分组变量时,first.var,last.var可能会帮你快速解决问题。

*first.var or last.var中的var是by依据的变量,就是按照哪个变量对数据集进行排列,;
*使用by语句之前,先用proc sort 过程进行排序;
*新的数据集a3,以身高height变量对数据集进行排序;
proc sort data = sashelp.class;
by height;
run;

data a3;
set sashelp.class ;
by height;*以height变量进行排序;
x4 = first.height;*讲临时变量赋值给x4(已说明临时变量存在安检过程,但不写进数据集中);
run;

对于x4的解释:first代表第一条观测,first,height身高第一次出现取值为1,不是则为0,主要看第八第九条观测:身高均为

62.5,所以先出现的为1,后面的无论出现多少次度取值0(当然得先按照这个变量排序)。而前七条观测x4均为1,是因为身高取值唯一当然也是唯一值里边的第一条。同理可得,last.height,身高最后一次出现为1.这里是身高第一或者最后一次意思是:这个值内的第一次,类似你刷卡进图书馆,你一天刷了10次,那么first.var是你第一次进馆为1,其余为零。last.var是你最后一次进馆为1,前面都是0.你就是上面讲的值(同一个人做同样事情的次数,只记录第一次和最后一次)。

其余的option用得比较少,就不写了。

总结:set就是把原材料从一个厂库搬到另一个(一些观测搬到另一个数据集)。而一些临时指数变量的作用在这里把它类似交通灯和转向牌,指示数据观测的一些状态以及走向选择。

多个数据集 set的作用 下一期将会和proc sql 过程的union做一下对比.

 

# 工业机器人1+X编程搬运码垛程序 ## 题目重述 本题围绕工业机器人“1+X证书制度”中搬运与码垛任务的编程内容展开,要求编写一个适用于工业机器人(如ABB、KUKA等)在实际产线中完成物料搬运及自动码垛任务的程序,并具备基本逻辑判断、路径控制和信号交互功能。 --- ## 详解 ### 搬运码垛任务概述: 搬运码垛是工业机器人常见应用场景之一,通常包括以下步骤: 1. **物料识别**:通过传感器或视觉系统确认物料位置。 2. **抓取动作**:机械臂移动至物料位置并抓取。 3. **放置动作**:将物料按指定顺序放置到托盘上。 4. **托盘更新**:当一层码放完成后,切换至下一层或更换空托盘。 5. **异常处理**:如物料未到位、夹具未闭合等情况触发报警或重试机制。 ### 程序结构说明: 以 ABB 机器人为例,使用 RAPID 编程语言实现如下逻辑: ```rapid MODULE Module1 CONST robtarget pHome := [[0,0,0],[1,0,0,0],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]]; CONST robtarget pPickPos := [[500,0,100],[1,0,0,0],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]]; CONST robtarget pPlacePosBase := [[-500,0,100],[1,0,0,0],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]]; VAR num layer := 0; VAR num stack := 0; PROC main() MoveJ pHome, v1000, fine, tool0; FOR stack FROM 1 TO 5 DO FOR layer FROM 1 TO 3 DO pick_part(); place_part(layer); ENDFOR; ENDFOR; TPWrite "码垛任务完成"; ENDPROC PROC pick_part() MoveL pPickPos, v500, z10, tool0; Set doGripperClose; ! 控制夹具闭合 WaitTime 1; MoveL Offs(pPickPos, 0, 0, 50), v300, z10, tool0; ENDPROC PROC place_part(IN num layer) MoveL Offs(pPlacePosBase, 0, 0, layer * 30), v500, z10, tool0; Set doGripperOpen; ! 控制夹具打开 WaitTime 1; MoveL Offs(pPlacePosBase, 0, 0, layer * 30 + 50), v300, z10, tool0; ENDPROC ENDMODULE ``` ### 关键代码解释: - `MoveJ`:关节运动方式快速回到原点。 - `MoveL`:直线运动方式确保抓取与放置过程稳定。 - `Set doGripperClose / Set doGripperOpen`:控制夹具动作。 - `Offs()`:用于生成偏移位置,实现不同层高的码放。 - 使用嵌套循环控制堆叠层数和数量。 - `TPWrite`:向示教器输出信息。 --- ## 知识点 1. **机器人运动指令** - 如 `MoveJ`(关节运动)、`MoveL`(直线运动),用于精确控制机械臂轨迹。 2. **I/O信号控制** - 控制外部设备(如夹具开闭)与反馈传感器状态,确保流程连贯性。 3. **多层码垛逻辑设计** - 利用循环结构和位置偏移函数 `Offs()` 实现自动逐层码放。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值