sas - SAS - 根据滞后数据创建错误报告
问题描述
我需要从数据集中创建一个(简单的?)错误报告。数据集如下所示:
Contract DrvrNum LicNum
------- ------- ---------
2212621 2 8241323
2212621 2 65256129
6385371 1 973385261
6385371 3 973385261
2366922 1 B931151BA
2366922 2 B931151BA
1007922 1 60916004
1007922 2 60916004
前 2 个观察结果表明我有同一个司机的两个不同的驾照号码,而接下来的三对观察表明两个或多个司机的驾照号码重复。
我的输出需要如下所示:
Contract DrvrNum LicNum ErrorReason
------- ------- --------- -----------
2212621 2 8241323
2212621 2 65256129 Multiple License Numbers for Same Driver
6385371 1 973385261
6385371 3 973385261 Duplicate License Number
2366922 1 B931151BA
2366922 2 B931151BA Duplicate License Number
1007922 1 60916004
1007922 2 60916004 Duplicate License Number
我曾尝试在数据步骤中使用LAG()函数并结合first.Contract = 0,但因为其他所有观察结果都是 FALSE,所以滞后值完全失控,使我无法执行以下操作:
if LicNum = lag(LicNum) then ErrorReason = 'Duplicate License Number';
else ErrorReason = 'Multiple License Numbers for Same Driver';
如果有人可以提供一些帮助,我将不胜感激。我对此一无所知。
谢谢!
解决方案
LAG() 的值队列基于您执行 LAG() 函数的时间。它与数据集中的观察结果无关。所以通常你不想有条件地执行 LAG() 函数。因此,您应该无条件地将值分配给变量,然后您可以有条件地测试变量的值。
但是,如果每个合同有两个以上的观察结果,LAG() 将无法解决您的问题。尝试这样的事情,它将跟踪合同下的所有许可证号。
data have ;
input Contract :$10. DrvrNum LicNum :$10. ;
cards;
2212621 2 8241323
2212621 2 65256129
6385371 1 973385261
6385371 3 97338526x
6385371 3 973385261
2366922 1 B931151BA
2366922 2 B931151BA
1007922 1 60916004
1007922 2 60916004
;
data want ;
set have ;
by contract drvrnum licnum notsorted;
length ErrorReason $100 LicenseList $200 ;
retain licenselist ;
if first.contract then licenselist=LicNum;
else do;
if indexw(licenselist,LicNum,' ') then
ErrorReason = catx(' ',ErrorReason,'Duplicate License Number.')
;
else licenselist=catx(' ',licenselist,licnum);
if first.licnum and not first.drvrnum then
ErrorReason = catx(' ',ErrorReason,'Multiple License Numbers for Same Driver.')
;
end;
run;
推荐阅读
- angular - 找不到资源文件“**/*.resx”.net core 2.1.1 角度模板
- android - Android O 访问 App 设置活动
- c++ - 使用初始化列表将 const 数组引用实例化为构造函数参数,是否允许?
- r - 朴素贝叶斯预测的“下标越界”错误?(训练/测试中的相同级别)
- python - function is not returning what is intended
- python - 将程序连接到正在运行的游戏,更新每一帧
- javascript - Handle table inside another HTML table without interfering with JAVASCRIPT
- unity3d - 当我点击播放时,Unity 会从脚本中删除游戏对象
- php - Fetch dynamically selected data from database using ajax php
- android - 如何在 android 设备上只保留一个应用程序的活动实例?