6

我目前有一个包含 200 个变量的数据集。从这些变量中,我创建了 100 个新变量。现在我想删除原来的 200 个变量。我怎样才能做到这一点?

稍微好一点的是,我如何在新数据集中删除变量 3-200。

抱歉,如果我的问题含糊不清,但基本上我发现我需要使用--。如果我的第一个变量被首先调用并且我的最后一个变量被最后调用,我可以使用 (drop= first--last); 删除其间的所有变量;

感谢所有的回复。

4

5 回答 5

5

与大多数 SAS 任务一样,有几种选择。从 SAS 数据集中删除变量的最简单和最安全的方法是使用 PROC SQL。只需按名称列出变量,用逗号分隔:

proc sql;
   alter table MYSASDATA
      drop name, age, address;
quit;

使用 PROC SQL 更改表会从数据集中删除变量。

另一种技术是使用DROP 选项重新创建数据集:

data have;
   set have(drop=name age address);
run;

还有一种方法是使用DROP 语句

data have;
   set have;
   drop name age address;
run;
于 2013-03-23T21:12:03.050 回答
4

很多选项——一些“更安全”,一些不太安全但更容易编码。假设您有一个包含变量 ID、PLNT 和 x1-x200 的数据集。

data have;
id=0;
plnt=0;
array x[200];
do _t = 1 to dim(x);
x[_t]=0;
end;
run;

data want;
set have;
*... create new 100 variables ... ;
*option 1:
drop x1-x200; *this works when x1-x200 are numerically consecutive;
*option 2:
drop x1--x200; *this works when they are physically in order on the dataset - 
                only the first and last matter;
run;

*或者,这样做。这也适用于 SQL ALTER TABLE。这是最安全的方法。

proc sql;
select name into :droplist separated by ' ' from dictionary.columns
where libname='WORK' and memname='HAVE' and name not in ('ID','PRNT');
quit;

proc datasets lib=work;
modify want;
drop &droplist.;
quit;
于 2013-03-23T22:45:16.020 回答
2

如果您要删除的所有变量都命名为相同的开头(如old_var_1, old_var_2, ..., old_var_n),您可以这样做(注意 drop 选项中的冒号):

data have;
set have(drop= old_var:);
run;
于 2013-03-24T16:19:46.640 回答
0

我有一些宏可以在这里实现 你可以运行整套宏,或者只运行list_vars(), is_blank(), num_words, find_word, remove_word, remove_words, nth_word()

使用这些将是:

%let keep_vars = keep_this and_this also_this;
%let drop_vars = %list_vars(old_dataset);
%let drop_vars = %remove_words(&drop_vars  , &keep_vars);

data new_dataset (drop = &drop_vars );
  set old_dataset;
 /*stuff happens*/
run;

这将保留三个变量keep_this and_this also_this,但删除旧数据集中的所有其他变量。

于 2021-04-21T14:01:54.157 回答
0
data want;
    set have;
    drop VAR1--VARx;
run;

很想知道你是否可以按职位做到这一点。绝对适用于由双破折号 (--) 分隔的变量名。

于 2020-05-23T06:18:03.053 回答