sas - 如何补全 SAS 表中的数据?
问题描述
我在 SAS 中有一个表,它看起来像这样:主键是 Name-Surname。
Row Name Surname Country Sec Salary
1 Foo Bar SP 1 1500
2 Foo Bar SP 2
3 Foo Bar 3 1500
4 Foo1 Bar1 1 2000
5 Foo1 Bar1 IT 2 2000
6 Foo1 Bar1 IT 3 2000
7 Foo1 Bar1 IT 4
8 Foo2 Bar2 PO 1
8 Foo2 Bar2 2 850
9 Foo2 Bar2 3
10 Foo2 Bar2 PO 4
它有空字段,我如何填写它,以便它们如下表所示?
Row Name Surname Country Sec Salary
1 Foo Bar SP 1 1500
2 Foo Bar SP 2 1500
3 Foo Bar SP 3 1500
4 Foo1 Bar1 IT 1 2000
5 Foo1 Bar1 IT 2 2000
6 Foo1 Bar1 IT 3 2000
7 Foo1 Bar1 IT 4 2000
8 Foo2 Bar2 PO 1 850
8 Foo2 Bar2 PO 2 850
9 Foo2 Bar2 PO 3 850
10 Foo2 Bar2 PO 4 850
谢谢你。
解决方案
假设您的数据按姓名和姓氏排序,并且您只想从具有相同姓名和姓氏的行中获取值,对于姓名和姓氏的每个组合,将所有数据读取两次。
data want;
set have (in=first_visit) have (in=second_visit);
by Name Surname;
第一次访问时,请记住填写的行中的 Country 和 Salary。如果存在不同的非缺失值,请在日志中发出警告。
if first_visit then do;
if first.Surname then do;
_Country = Country;
_Salary = Salary;
end;
else do;
if missing(_Country) then _Country = Country;
else if _Country ne Country and not missing(Country) then put
'WARNING: different values:' Country= ' and ' _Country
' for ' Name= Surname=;
if missing(_Salary) then _Salary = Salary;
else if _Salary ne Salary and not missing(Salary) then put
'WARNING: different values:' Salary= ' and ' _Salary
' for ' Name= Surname=;
end;
end;
第二次访问,用第一次访问保留的值填写空白。(请注意,我们不需要变量second_visit
,但如果我定义它会更容易理解。)
else do; * this is the _second_visit ;
if missing(Country) then Country = _Country;
if missing(Salary) then Salary = _Salary;
end;
为了完成这项工作,我们必须显式保留临时值,因为默认情况下 SAS 会为每个观察值初始化所有变量。(我所有的名字都以 开头_
,因为我可以用通配符来引用它们,但这只有在创建变量之后放置保留语句时才有效。)
retain _:;
由于保留的值没有进一步的用途,因此将它们从结果中删除。_(请注意,由于我们定义它们的方式,first_visit 和 second_visit 也被删除了。)_
drop _:;
run;
推荐阅读
- c# - C#。在达到 5 次失败尝试后,消息“您已用完猜测!它是数字”+ 数字永远不会显示,我需要帮助。谢谢
- azure-devops - Azure 管道自托管代理 - 是否应该有单独的用户来构建和部署?
- mysql - SQL:只要有 5 的倍数就增加一个新列,否则不要
- c# - PowerPDF API - 将 VB 代码转换为 C# - 错误 HRESULT E_FAIL
- python - 在python中将数据提取到矩阵或numpy数组中的有效方法
- scala - 如何解决不同版本的传递依赖?
- c++ - 在程序中找到最小的变量?
- python - 'str' 对象没有属性 'decode' 错误
- c++ - sdl2中的矩形为整个屏幕设置颜色
- python-3.x - m1 macOS Big Sur 上的 pygame 2.0.0 安装错误