2013-03-23 48 views
6

Tôi hiện có tập dữ liệu với 200 biến. Từ những biến đó, tôi đã tạo ra 100 biến mới. Bây giờ tôi muốn giảm 200 biến ban đầu. Làm thế nào tôi có thể làm điều đó?Thả một loạt các biến trong SAS

Sẽ tốt hơn một chút, làm cách nào tôi có thể xóa biến 3-200 trong tập dữ liệu mới.

xin lỗi nếu tôi mơ hồ trong câu hỏi của mình nhưng về cơ bản tôi đã tìm ra tôi cần phải sử dụng -. Nếu biến đầu tiên của tôi được gọi là đầu tiên và biến cuối cùng của tôi được gọi là cuối cùng, tôi có thể thả tất cả các biến inbetween với (drop = first - last);

Cảm ơn tất cả các câu trả lời.

Trả lời

5

Như với hầu hết các tác vụ SAS, có một vài lựa chọn thay thế. Cách dễ nhất và an toàn nhất để xóa các biến từ một tập dữ liệu SAS là với PROC SQL. Chỉ cần liệt kê các biến theo tên, được phân tách bằng dấu phẩy:

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

Thay đổi bảng bằng PROC SQL sẽ xóa các biến khỏi tập dữ liệu tại chỗ.

kỹ thuật khác là để tái tạo bộ dữ liệu sử dụng một DROPtùy chọn:

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

Tuy nhiên một cách khác là sử dụng một DROPtuyên bố:

data have; 
    set have; 
    drop name age address; 
run; 
+1

Tất nhiên, nếu bạn có ít biến hơn bạn muốn * giữ * hơn * thả * và bạn muốn sử dụng một trong các kỹ thuật này, nơi bạn phải đặt tên chúng trong mã, bạn muốn thay vào đó hãy sử dụng 'KEEP'. – sasfrog

3

Nhiều lựa chọn - một số 'an toàn hơn', một số ít an toàn hơn nhưng dễ viết hơn. Hãy tưởng tượng bạn có một tập dữ liệu với các biến ID, PLNT và x1-x200 để bắt đầu.

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; 

* Hoặc thực hiện theo cách này. Điều này cũng sẽ làm việc với SQL ALTER TABLE. Đây là cách an toàn nhất để thực hiện điều đó .;

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; 
+0

Cảm ơn, điều này là chính xác. – sujinge9

+1

Tôi không nghĩ rằng bạn có thể thả các biến trong PROC DATASETS, thủ tục đó thường được sử dụng để sửa đổi phần mô tả của tập dữ liệu. Đã có một sự thay đổi trong một phiên bản sau của SAS? – Longfish

+2

@Keith Bạn đúng; người ta không thể thả các biến bằng cách sử dụng PROC DATASETS. – BellevueBob

1

Nếu tất cả các biến bạn muốn thả được đặt tên như vậy tất cả đều bắt đầu giống nhau (như old_var_1, old_var_2 ..., old_var_n), bạn có thể làm điều này (lưu ý đại tràng trong tùy chọn thả):

data have; 
set have(drop= old_var:); 
run; 
+0

+1 cho khớp với ký tự đại diện SAS. Đã lưu tôi từ đăng bài này! – user667489

Các vấn đề liên quan