楼主: qnsz
6042 17

[程序分享] SAS数据集处理 [推广有奖]

  • 0关注
  • 10粉丝

已卖:179份资源

教授

93%

还不是VIP/贵宾

-

威望
1
论坛币
3295 个
通用积分
1953.4362
学术水平
34 点
热心指数
61 点
信用等级
40 点
经验
86602 点
帖子
1076
精华
0
在线时间
1651 小时
注册时间
2009-1-23
最后登录
2022-12-8

楼主
qnsz 发表于 2011-7-5 12:01:33 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
需要将一个文件里面的所有数据,减去另一个文件中的一行数据,再取绝对值生成新的数据,求代码!O(∩_∩)O谢谢
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:sas数据集 数据集 取绝对值 绝对值 SAS 数据集

回帖推荐

zhaoping603 发表于4楼  查看完整内容

data a; input no v1 v2 v3; cards; 1 2 3 4 2 3 4 5 3 4 5 6 4 2 1 5 ;run; data b; input v1 v2 v3; cards; 2 2 2 ;run; proc sql; create table want as select no,a.v1-b.v1 as v1 ,a.v2-b.v2 as v2,a.v3-b.v3 as v3 from a,b; run;

本帖被以下文库推荐

沙发
nomad5 发表于 2011-7-5 13:24:47
我是没看明白什么意思……

藤椅
qnsz 发表于 2011-7-5 16:34:39
2# nomad5
数据集A:变量No,V1,V2,V3(i行,4列)
数据集B:变量V1,V2,V3(1行,3列)
数据集C:变量No,V1,V2,V3(i行,4列)

C(i,v1,v2,v3)=abs[A(i,v1,v2,v3)-B(v1,v2,v3)]

这样说清楚了吧?

板凳
zhaoping603 发表于 2011-7-6 09:54:20
data a;
input  no v1 v2 v3;
cards;
1 2 3 4
2 3 4 5
3 4 5 6
4 2 1 5
;run;
data b;
input v1 v2 v3;
cards;
2 2 2
;run;

proc sql;
create table  want  as
select no,a.v1-b.v1 as v1 ,a.v2-b.v2 as v2,a.v3-b.v3 as v3
from  a,b;
run;
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
bakoll + 3 + 3 精彩帖子
qnsz + 1 + 1 + 1 还需要取绝对值,并且对A中的缺失值在C中继续保留为缺失值

总评分: 经验 + 3  论坛币 + 3  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

报纸
zhaoping603 发表于 2011-7-6 10:35:11
  1. data c;
  2. set a ;
  3. if _n_=1 then set b(rename=(v1=d1 v2=d2 v3=d3));
  4. v1=v1-d1;
  5. v2=v2-d2;
  6. v3=v3-d3;
  7. drop d1 d2 d3;
  8. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
qnsz + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

地板
qnsz 发表于 2011-7-6 10:50:13
数据集A:变量No,V1,V2,V3(i行,4列)
数据集B:变量V1,V2,V3(1行,3列)
数据集C:变量No,V1,V2,V3(i行,4列)

C(i,v1,v2,v3)=abs[A(i,v1,v2,v3)-B(v1,v2,v3)]

需要取绝对值,并且对A中的缺失值在C中继续保留为缺失值(不进行计算)

7
qnsz 发表于 2011-7-6 10:51:49
4# zhaoping603
而且还有个问题,SAS说命令不能超过6000个字符,我有2000个变量,这么弄进去命令不能运行。

8
zhaoping603 发表于 2011-7-6 14:29:19
缺失值,绝对值好弄。主要是批量处理问题,你的两个数据集的变量的名字都是一样的么?建议你看看SAS里边矩阵能不能解决,这个我不懂。或者用数组吧。 7# qnsz

9
zhaoping603 发表于 2011-7-6 15:27:30
程序只适用变量名如v1,v2,这种规则的后面有数字的,你也可以写不规则的,但是要罗列出来了。更高级的,兼顾所有的,我不会写了。
  1. data a;
  2. input no v1 v2 v3;
  3. cards;
  4. 1 . 3 4
  5. 2 3 . 5
  6. 3 4 5 6
  7. 4 2 1 5
  8. ;run;
  9. data b;
  10. input v1 v2 v3;
  11. cards;
  12. 2 2 2
  13. ;run;



  14. PROC SQL NOPRINT;
  15. SELECT TRIM(NAME)||"=d_"||TRIM(NAME) INTO :STR_RENAME SEPARATED BY ' '
  16. FROM SASHELP.VCOLUMN
  17. WHERE LIBNAME="WORK" AND MEMNAME="B";
  18. QUIT;
  19. DATA WORK.B;
  20. SET WORK.B;
  21. RENAME &STR_RENAME;
  22. RUN;
  23. proc sql;
  24. create table want as
  25. select *
  26. from a,b;
  27. run;
  28. data want;
  29. set want;
  30. array v(*) v1-v3;
  31. array d(*) d_v1-d_v3 ;
  32. do i=1 to 3;
  33. if not(missing(v(i))) then v(i)= abs(v(i)-d(i));
  34. end;
  35. drop i d_v1-d_v3;
  36. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
qnsz + 1 + 1 + 1 17行那里是不是可以不要?还有数据B只有1行,你这程序好像只处理了对角线上的。

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

10
qnsz 发表于 2011-7-6 20:18:59
用楼上的代码,并把数据集B复制黏贴成同样是i行的矩阵,结果运行的时候SAS说out of resources

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-3 06:40