我目前有一个包含 200 个变量的数据集。从这些变量中,我创建了 100 个新变量。现在我想删除原来的 200 个变量。我怎样才能做到这一点?
稍微好一点的是,我如何在新数据集中删除变量 3-200。
抱歉,如果我的问题含糊不清,但基本上我发现我需要使用--。如果我的第一个变量被首先调用并且我的最后一个变量被最后调用,我可以使用 (drop= first--last); 删除其间的所有变量;
感谢所有的回复。
我目前有一个包含 200 个变量的数据集。从这些变量中,我创建了 100 个新变量。现在我想删除原来的 200 个变量。我怎样才能做到这一点?
稍微好一点的是,我如何在新数据集中删除变量 3-200。
抱歉,如果我的问题含糊不清,但基本上我发现我需要使用--。如果我的第一个变量被首先调用并且我的最后一个变量被最后调用,我可以使用 (drop= first--last); 删除其间的所有变量;
感谢所有的回复。
与大多数 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;
很多选项——一些“更安全”,一些不太安全但更容易编码。假设您有一个包含变量 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;
如果您要删除的所有变量都命名为相同的开头(如old_var_1
, old_var_2
, ..., old_var_n
),您可以这样做(注意 drop 选项中的冒号):
data have;
set have(drop= old_var:);
run;
我有一些宏可以在这里实现
你可以运行整套宏,或者只运行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
,但删除旧数据集中的所有其他变量。
data want;
set have;
drop VAR1--VARx;
run;
很想知道你是否可以按职位做到这一点。绝对适用于由双破折号 (--) 分隔的变量名。