楼主: xuantai
5584 9

[原创博文] 请问如何删除和保留最后一个变量 [推广有奖]

  • 0关注
  • 0粉丝

小学生

42%

还不是VIP/贵宾

-

威望
0
论坛币
9 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
83 点
帖子
4
精华
0
在线时间
3 小时
注册时间
2009-2-17
最后登录
2010-8-15

楼主
xuantai 发表于 2010-8-13 10:10:54 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
现在有好几个dataset,每个dataset最后一个变量都是表示的相同性质的内容。当时这些dataset的变量数是不同的。现在想把每个dataset最后一个变量的内容提出来。
我直接的思路是分两个步骤:把只删掉最后一个变量的data存成一个data;同样把只保留最后一个变量的data再存成另外一个data。
然后可以用macro重复这两个步骤。就可以自动提出来那些最后一个变量的内容了。

但是在不知道变量名的情况下如何做到那两步呢?有什么办法只按位置找到最后这个变量并进行删除和保留呢?

谢谢
二维码

扫码加我 拉你入群

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

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

关键词:最后一个 dataset DataS Macro Data 如何

回帖推荐

pobel 发表于9楼  查看完整内容

data a; y=2;z=2; run; data b; x=3; y=3; z=3; run; proc sql noprint; select name into :var_a from dictionary.columns where libname="WORK" and memname="A" having varnum=max(varnum); select name into :var_b from dictionary.columns where libname="WORK" and memname="B" having varnum=max(varnum); quit; data c; set a(keep=&var_a) b(k ...

本帖被以下文库推荐

沙发
nkuniverse 发表于 2010-8-13 10:15:54
我也非常想知道怎么做,请牛人解答,多谢

藤椅
yz7891 发表于 2010-8-13 10:54:55
没搞懂你的意思。你的意思是不是想要提取出最后一条数据??如果是的话以下代码可以试一下:
  1. data b;
  2.     set a nobs=last point=last;
  3.     output;
  4.     stop;
  5. run;
复制代码


PS:从版主的书上提取出来的

板凳
hopewell 发表于 2010-8-13 10:57:58
  1. data one;
  2. input x @@;
  3. datalines;
  4. 1 1 1
  5. ;
  6. data two;
  7. input x y @@;
  8. datalines;
  9. 2 3 2 3 2 3
  10. ;
  11. data three;
  12. input x y z @@;
  13. datalines;
  14. 4 5 6 4 5 6 4 5 6
  15. ;
  16. %macro test/parmbuff;
  17. options mcompilenote=none nomprint nosymbolgen nomlogic;
  18. data %scan(&syspbuff,1); run;
  19. %let n=2;
  20. %let dsname=%scan(&syspbuff,&n);
  21. %do %while(&dsname ne);
  22.   %let dsid=%sysfunc(open(&dsname,i));
  23.   %let varname=%sysfunc(varname(&dsid,%sysfunc(attrn(&dsid,nvars))));
  24.   %let rc=%sysfunc(close(&dsid));
  25.   %put &dsname &varname;
  26.   data out;
  27.    merge out &dsname(keep=&varname);
  28.   run;
  29.   %let n=%eval(&n+1);
  30.   %let dsname=%scan(&syspbuff,&n);
  31. %end;
  32. %mend;
  33. %test(out one two three)
复制代码
已有 2 人评分论坛币 学术水平 热心指数 收起 理由
crackman + 1 + 1 不错
peijiamei + 100 精彩帖子

总评分: 论坛币 + 100  学术水平 + 1  热心指数 + 1   查看全部评分

报纸
akoug 学生认证  发表于 2010-8-13 11:06:46
用iml吧

前面步骤得到一个data

proc iml;
*generate the matrix from the existing data;
use dataset;
read all into mat;
close dataset;
length=ncol(mat[1,]);
last=mat[,length];

do i=1 to length-1;
   other=other||mat[,i];
end;


create lastvar from last;
append from last;
close lastvar;

create othervar from other;
append from other ;
close othervar;
run;

不过我这code的问题是变量名不能保持,只能把里面的观测值分开。不知道是否符合要求。不知道在data步里有没有能直接实现这个做法的方法,要是有的话也想学习一下啊。

地板
akoug 学生认证  发表于 2010-8-13 11:14:53
隔层楼的高手厉害,我还在翻data步里last.的那些用法呢,呵呵。

7
jingju11 发表于 2010-8-13 11:19:58
hopewell 发表于 2010-8-13 10:57
  1. data one;
  2.         input x @@;
  3. datalines;
  4. 3 2 1
  5. ;
  6. data two;
  7.         input x y @@;
  8. datalines;
  9. 3 3 2 2 1 1
  10. ;
  11. data three;
  12.         input x y z @@;
  13. datalines;
  14. 3 3 3 2 2 2 1 1 1
  15. ;
  16. data out;
  17.         set one(in=one) two(in=two) three(in=three);
  18.         select;
  19.                 when (one) group=1;
  20.                 when (two) group=2;
  21.                 when (three) group=3;
  22.         end;
  23. run;
  24. data out(drop=group);
  25.         set out;
  26.         by group;
  27.         if last.group;
  28. run;
复制代码
大牛:他要的是删除最后一个变量啊。不是记录吧。。。

8
akoug 学生认证  发表于 2010-8-13 11:21:31
nod, 是啊,lz的意思是varible而非observation吧

9
pobel 在职认证  发表于 2010-8-13 11:34:34
data a;
    y=2;z=2;
run;

data b;
    x=3; y=3; z=3;
run;

proc sql noprint;
    select name into :var_a
       from dictionary.columns
          where libname="WORK" and memname="A"
      having varnum=max(varnum);

        select name into :var_b
           from dictionary.columns
          where libname="WORK" and memname="B"
      having varnum=max(varnum);
quit;

data c;
    set a(keep=&var_a) b(keep=&var_b);
run;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

和谐拯救危机

10
soporaeternus 发表于 2010-8-13 13:15:22
同时看到那么多大大们,弯下腰,深深的鞠一躬,然后默默地离开
我想到的也是元数据里的vcolume的varnum......
Let them be hard, but never unjust

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 13:17