楼主: redaring
11614 10

[原创博文] [求助] sas中如何根据条件删除变量? [推广有奖]

  • 0关注
  • 0粉丝

硕士生

21%

还不是VIP/贵宾

-

威望
0
论坛币
48 个
通用积分
0.0600
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
4910 点
帖子
102
精华
0
在线时间
123 小时
注册时间
2009-11-22
最后登录
2018-2-15

楼主
redaring 发表于 2010-2-1 17:27:39 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
在sas里怎样根据一定的条件删除变量。

我知道可以用  if var1=111 then delete; 这个可以根据条件删除观测值。

我遇到的问题是怎样根据条件来删除变量呢。例如有var1   var2   var3   var4 的变量,我想设定条件 当 var1=0  and var2 =0时,删除var2,同理当var1=0 and var3=0 时,删除var3 ,以此类推。
二维码

扫码加我 拉你入群

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

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

关键词:delete Then VaR The 观测值 如何

沙发
crackman 发表于 2010-2-1 18:43:25
你这样说
删除的是一个观测值还是整个变量呢?
不明白你的意思
所有观测值的VAR1的值都为0吗?
VAR2也是为0吗?
你的意思是不是一个观测里面如果VAR1=0 AND VAR2=0 然后删除这个观测的VAR2的值吗?

藤椅
redaring 发表于 2010-2-1 20:12:08
var1  var2  var3  var4
111  222   555   436
224  346   125   753
         134   345   
887  354   576   235

就是一个观测值里符合这个条件的,整个变量删掉。例如这里第三行 var1=空 and  var4=空 ,然后就把整个var4 删掉,变成只有var1 var2 var3 三个变量。

板凳
zzh256 发表于 2010-2-2 00:30:43
redaring 发表于 2010-2-1 20:12
var1  var2  var3  var4
111  222   555   436
224  346   125   753
         134   345   
887  354   576   235

就是一个观测值里符合这个条件的,整个变量删掉。例如这里第三行 var1=空 and  var4=空 ,然后就把整个var4 删掉,变成只有var1 var2 var3 三个变量。
那么,第一行行的var4怎么办?

报纸
bobguy 发表于 2010-2-2 08:52:04
redaring 发表于 2010-2-1 17:27
在sas里怎样根据一定的条件删除变量。

我知道可以用  if var1=111 then delete; 这个可以根据条件删除观测值。

我遇到的问题是怎样根据条件来删除变量呢。例如有var1   var2   var3   var4 的变量,我想设定条件 当 var1=0  and var2 =0时,删除var2,同理当var1=0 and var3=0 时,删除var3 ,以此类推。
Not quite sure what you want.

Suppose that
var2=0 and   var3=0 and    var4=0
What si the rule.

Second, you will need to data step. One checks the condition and mark the variable will be dropped. The other is to create a NEW data set without those marked variables.

地板
redaring 发表于 2010-2-2 11:19:07
4# zzh256

是整个var4 都不要了,删掉

7
redaring 发表于 2010-2-2 11:26:02
5# bobguy

不管var2 var3 var4之间怎样,只是以var1为标准,如果var1=0,而var2在同一条记录中也同为0,那么就把整个var2这个变量删除。

我主要是用于计算的,我想对var1中的空值进行插值,但是其他变量如果在var1为空的时候,他们(例如var2)在同一条记录中也是空的话,那么就没有办法计算,所以要把这整个变量删掉。保留下来的变量,在其他地方是空值的话是不影响的,只要不要和var1同时为空就行。

不知道我是否表达清楚了。

8
bobguy 发表于 2010-2-2 12:09:00
redaring 发表于 2010-2-2 11:26
5# bobguy

不管var2 var3 var4之间怎样,只是以var1为标准,如果var1=0,而var2在同一条记录中也同为0,那么就把整个var2这个变量删除。

我主要是用于计算的,我想对var1中的空值进行插值,但是其他变量如果在var1为空的时候,他们(例如var2)在同一条记录中也是空的话,那么就没有办法计算,所以要把这整个变量删掉。保留下来的变量,在其他地方是空值的话是不影响的,只要不要和var1同时为空就行。

不知道我是否表达清楚了。
I am still not quite clear. The following could be a template which you can modify according to your needs.

326  data t1;
327
328     do i = 1 to 20;
329         var1=floor(ranuni(112345)*10);
330         var2=floor(ranuni(112345)*10);
331         var3=ceil(ranuni(112345)*10);
332         var4=floor(ranuni(112345)*10);
333         output;
334         put @1 var1= @10 var2= @20 var3= @30 var4=;
335      end;
336  run;

var1=6   var2=6    var3=3    var4=1
var1=4   var2=4    var3=10   var4=9
var1=1   var2=4    var3=4    var4=2
var1=5   var2=8    var3=9    var4=2
var1=5   var2=1    var3=7    var4=9
var1=9   var2=9    var3=8    var4=3
var1=5   var2=0    var3=7    var4=5
var1=1   var2=5    var3=8    var4=3
var1=1   var2=9    var3=4    var4=5
var1=6   var2=0    var3=4    var4=8
var1=3   var2=2    var3=6    var4=3
var1=3   var2=9    var3=3    var4=6
var1=0   var2=3    var3=7    var4=4
var1=3   var2=4    var3=10   var4=7
var1=0   var2=8    var3=8    var4=1
var1=0   var2=3    var3=7    var4=3
var1=5   var2=0    var3=7    var4=6
var1=1   var2=7    var3=3    var4=0
var1=3   var2=3    var3=10   var4=1
var1=6   var2=2    var3=5    var4=3
NOTE: The data set WORK.T1 has 20 observations and 5 variables.
NOTE: DATA statement used (Total process time):
      real time           0.01 seconds
      cpu time            0.01 seconds


337
338  data _null_;
339      array checkvar(3) var2-var4;
340      array dropvar_index ( 3) _temporary_;
341      set t1 end=end;
342      do i=1 to dim(checkvar);
343      if  dropvar_index(i)  ne 1 then  do;
344          if  checkvar(i) = 0 then  dropvar_index(i)=1;
345      end;
346      end;
347      if end then do;
348      call execute('data new; set t1(keep=var1 ' );
349         do i = 1 to dim ( checkvar );
350             if  dropvar_index(i) ne 1 then call execute(vname( checkvar(i) ) );
351         end;
352      call execute( ');run;' );
353      end;
354  run;

NOTE: There were 20 observations read from the data set WORK.T1.
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds


NOTE: CALL EXECUTE generated line.
1   + data new; set t1(keep=var1
2   + var3
3   + );run;

NOTE: There were 20 observations read from the data set WORK.T1.
NOTE: The data set WORK.NEW has 20 observations and 2 variables.
NOTE: DATA statement used (Total process time):
      real time           0.01 seconds
      cpu time            0.00 seconds

9
xuwei2007 发表于 2010-2-2 16:11:33
proc sql;

10
happylele77 发表于 2013-9-16 10:32:34
没那么复杂, 1) 先proc transpose 转置,2)然后 data 步 if var1=0 or var3=0 then delete,3)再用transpose 转过来就可以了

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

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