楼主: yook
10662 10

SAS如何间隔提取数据集的多个变量 [推广有奖]

  • 1关注
  • 0粉丝

大专生

25%

还不是VIP/贵宾

-

威望
0
论坛币
2879 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
2208 点
帖子
33
精华
0
在线时间
61 小时
注册时间
2008-11-4
最后登录
2014-10-1

楼主
yook 发表于 2012-12-13 04:11:19 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
非常感谢热心跟帖的朋友,这个问题现已很好的解决。使用它们的方法之后,我也把体会分享一下。或许对有类似问题的朋友有帮助。

webgu, 老师她摸我, ziyenano 的3种方法都能够达到间隔提取变量的目的。但是由于我的数据量比较大,所有就比较了一下3种方法webgu 的方法最快,而且我发现他考虑的很周到,考虑到了keep我所列变量之外的其他变量(见8楼代码18行a1)。这样就可以更好的挑选变量用于建立新的数据集。
--------------------------------------------------------------------------------------
原问题如下:
有一个数据集 其中包含大量变量,变量名比较规则 假设变量名为 A1, A2, A3, ..., A1000
那么如何固定间隔提取某些变量 用于建立新的数据集呢
比如间隔5个, 只提取5的倍数:
A5, A10, A15, A20, ..., A1000
如果是keep 或是 drop 太麻烦了哦,而且有时变量比我举例的还要多。
请高手解答,非常感谢!
二维码

扫码加我 拉你入群

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

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

关键词:多个变量 数据集 keep 非常感谢 drop 间隔 如何

回帖推荐

webgu 发表于8楼  查看完整内容

ziyenano 发表于3楼  查看完整内容

data work.ex; array A(20); do i=1 to 20; A(i)=1; end; drop i; ; run; proc sql noprint; select name into :col_name separated by ' ' from sashelp.vcolumn where libname='WORK' and memname='EX' and compress(name,'','d')='A' and mod(input(compress(name,'','kd'),best32.),5)=0; quit; data ex1; set ex; keep &col_name; run;

本帖被以下文库推荐

  • · MyLib|主题: 414, 订阅: 41

沙发
zhoucejing 发表于 2012-12-13 08:25:31
这个很容易就能做到,用一个程序:
forvalues i = 1/200 {
local j = 5*`i'
ge a`i' = A`j'
}
keep a1-a200
save 后面省略了!!

藤椅
ziyenano 发表于 2012-12-13 09:39:34
data  work.ex;
array A(20);
do i=1 to 20;
A(i)=1;
end;
drop i;
;
run;


proc sql noprint;
select name into :col_name separated by ' '
from sashelp.vcolumn
where libname='WORK' and memname='EX'
and compress(name,'','d')='A' and
mod(input(compress(name,'','kd'),best32.),5)=0;
quit;

data ex1;
set ex;
keep &col_name;
run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
ryuuzt + 1 + 1 + 1 赞。

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

板凳
老师她摸我 发表于 2012-12-13 15:36:44
  1. data test;
  2.         array A{50};
  3. run;
  4. proc transpose data=test out=test1;
  5. run;
  6. data test2;
  7.         do i=5 to nobs by 5;
  8.                 set test1 point=i nobs=nobs;
  9.                 output;
  10.         end;
  11.         stop;
  12. run;
  13. proc transpose data=test2 out=test3(drop=_name_);
  14. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
ryuuzt + 1 + 1 + 1 简练实用。

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

欢迎加入SAS群:144839730-蜗牛

报纸
yook 发表于 2012-12-13 21:26:13
老师她摸我 发表于 2012-12-13 15:36
多谢回复!
我是个sas初学者,你的这个方法我看的最明白。sas选取obs比变量更灵活,转置一下方便多了

地板
yook 发表于 2012-12-13 21:33:59
ziyenano 发表于 2012-12-13 09:39
data  work.ex;
array A(20);
do i=1 to 20;
多谢您的回复!
测试成功!
但是中间那段 sql的语句, 我看着有些吃力。还得多多学习

7
yook 发表于 2012-12-13 21:40:20
zhoucejing 发表于 2012-12-13 08:25
这个很容易就能做到,用一个程序:
forvalues i = 1/200 {
local j = 5*`i'
虽然不太明白你写的,还是谢谢你!

8
webgu 发表于 2012-12-14 08:55:59
  1. data  demo;
  2. array A(20);
  3. do i=1 to 20;
  4.         A(i)=1;
  5. end;
  6. drop i;
  7. ;
  8. run;

  9. %macro keepvar();
  10.    %do i=5 %to 20 %by 5;
  11.        A&i
  12.         %end;
  13. %mend;

  14. data want;
  15. set  demo;
  16. keep  a1 %keepvar;
  17. run;
复制代码
已有 3 人评分学术水平 热心指数 信用等级 收起 理由
木乔Bridget + 1 + 1 + 1 观点有启发
yook + 1 + 1 + 1 热心帮助其他会员
ryuuzt + 1 + 1 + 1 热心帮助其他会员

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

SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

9
yook 发表于 2012-12-14 22:26:57
webgu 发表于 2012-12-14 08:55
太牛了!
你这个方法运行最快,非常感谢你!

10
bylsysu 发表于 2014-7-31 16:09:44
请教一下,我现在要保留A1 A5 A10……,语句怎么写啊?

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

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