楼主: qnsz
6039 17

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

11
zhaoping603 发表于 2011-7-7 09:39:29
你说你的B数据集是一行的,我就按照一行的写的程序,不适合于多行。你跑一下我的程序就知道,完全符合你的要求。你不说你的变量名字具体是什么样的,我就按照v1,v2,这样带数字的做了。我的程序有一个毛病是,由于数组的命名,变量名要求如v1,v2这种才能运行无措。其他的问题都没有。你先跑好别人的程序再改。而且你自己的修改未必使程序能适合。17行里面你可以去掉noprint,其他都是必须的关键字。你的更多问题,我没有能力回答啦。抱歉。 10# qnsz
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
qnsz + 1 + 1 + 1 我水平不行啊,你能不能再帮我看看?

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

12
qnsz 发表于 2011-7-7 16:23:13
11# zhaoping603
额,我又把我的数据集名字重命名成AB果然就能用了。我原来是把你程序里面的a和B改成我数据的名字,结果不能用。但是我怎么弄也不能让它处理3列以上的数据,你再帮我看看行么?

stock 5000行,变量:sample,i,no,name,v1-v2185
mean 1行,变量:v1-v2185

其他的还是一样。

顺便再问下为啥用SASHELP.VCOLUMN里面的数据呢?

13
zhaoping603 发表于 2011-7-7 17:05:45
SASHELP.VCOLUMN 是库SASHELP中的数据集,包含所有的库中的数据集的信息,里面有变量名字。我是想从这里取出变量名字,重命名,避免与前一个数据集一起操作时,由于名字相同,覆盖掉信息。我没处理过那么大的数据,看你提供的变量名字都还是v1,v2这样的。我觉得你把我的程序改一下就可以用了。但是数据太大,也可能在
select *

from stock ,mean;

run;
这步,由于数据大有问题。我没处理过这么大数据。建议你考虑IML矩阵,自己学学。
  1. PROC SQL NOPRINT;

  2. SELECT TRIM(NAME)||"=d_"||TRIM(NAME) INTO :STR_RENAME SEPARATED BY ' '

  3. FROM SASHELP.VCOLUMN

  4. WHERE LIBNAME="WORK" AND MEMNAME="MEAN";

  5. QUIT;

  6. DATA WORK.mean;

  7. SET WORK.mean;

  8. RENAME &STR_RENAME;

  9. RUN;

  10. proc sql;

  11. create table want as

  12. select *

  13. from stock ,mean;

  14. run;

  15. data want;

  16. set want;

  17. array v(*) v1-v2185;

  18. array d(*) d_v1-d_v2185 ;

  19. do i=1 to 2185;

  20. if not(missing(v(i))) then v(i)= abs(v(i)-d(i));

  21. end;

  22. drop i d_v1-d_v2185;

  23. run;
复制代码
12# qnsz
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
qnsz + 1 + 1 + 1 和我用excel算的一样,没错!真是奇怪,上午我把那个3全部替换成2185都不行

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

14
zhaoping603 发表于 2011-7-8 09:04:40
有可能你没有完全改好。也有可能是你之前跑的程序出现的数据集已经是错误的了。这样的话,建议你把这样的错的数据集删掉,否则再跑改过的程序,往那个错误的数据集中读入数据会经常出错的。这个问题SAS总是这样。 13# zhaoping603
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
qnsz + 1 + 1 + 1 热心帮助其他会员

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

15
qnsz 发表于 2011-7-8 10:26:55
14# zhaoping603 高手 ,再帮我看下着两个,行不行?O(∩_∩)O谢谢!
https://bbs.pinggu.org/thread-1130083-1-1.html
https://bbs.pinggu.org/thread-1131604-1-1.html

16
qnsz 发表于 2011-7-19 22:50:46
13# zhaoping603
申请版主发奖

17
xw358919241 发表于 2013-7-21 17:55:16
大神们好,我能咨询一个问题么?请问如果我已经有了一个数据集A,要生成新的数据集B,而且B的数据是从A的第三行开始的,请问程序该如何写?谢谢!

18
tanlianwm 发表于 2013-7-23 22:39:20
data test2;
set test1;
if _n_ < 3 then delete;
run;
tanlian

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

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