2009-06-24 39 views
7

Có tương đương với chức năng Oracle NVL trong SAS không?Xử lý các giá trị bị thiếu bằng không ở SAS trong đó khoản

Ví dụ, nếu tôi có một mệnh đề where trong SAS nói rằng:

nó sẽ không bao gồm bất kỳ hàng nào có myVar =.

Nếu tôi muốn để điều trị thiếu giá trị như bằng không, tôi có thể nói:

where myVar > -2 or missing(myVar) 

Tôi muốn để có thể làm điều gì đó như:

where NVL(myVar, 0) > -2 // or some SAS equivalent 

Có một cái gì đó như thế này ở SAS?

+1

Lưu ý rằng chỉ có dữ liệu không phải SAS có hàng với myVar =. sẽ không được bao gồm. Lý do là các giá trị bị thiếu là NULL và các so sánh với NULL sẽ luôn luôn được đánh giá là FALSE. Trong dữ liệu SAS gốc, giá trị bị thiếu được coi là số không âm, nhỏ hơn 0. Vì vậy, "nơi myVar> -2;" thực sự sẽ làm việc với các giá trị bị thiếu khi hoạt động trên dữ liệu SAS gốc. –

Trả lời

13

coalesce function nên thực hiện công việc.

where coalesce(myVar,0) > -2 

Tôi không chắc liệu chức năng có sẵn trong SAS 9 hay không, vì vậy nếu bạn có phiên bản SAS thực sự cũ, điều này có thể không hoạt động.

7

Sử dụng chức năng kết hợp là cách phù hợp để thực hiện việc này.

Nhưng nếu bạn có một phiên bản cũ của SAS nơi liên hiệp không được thực hiện, bạn có thể sử dụng thủ thuật này:

where sum(myVar,0) > -2 

Nếu bạn sử dụng sum function trong SAS để thêm, số lượng bất kỳ phi mất tích trong tổng kết sẽ buộc kết quả là không bị thiếu.

Do đó việc thêm 0 với hàm tổng sẽ biến đổi giá trị bị thiếu thành 0 và các giá trị không bị thiếu sẽ vẫn không bị thay đổi.

+1

+1: Đó là một gợi ý tuyệt vời! Chúng tôi không còn hỗ trợ SAS 8 cho sản phẩm của chúng tôi vì vậy tôi thực sự không quan tâm nếu coalesce có sẵn sau đó hay không, nhưng nếu tôi đã làm, điều này sẽ là một workaround khéo léo. – Adnan

-1

Một điều mà y có thể làm là như mảng varlistname var1 var2 var3 varn; nếu mảng <>. sau đó đầu ra;

Nó sẽ sử dụng các tập dữ liệu có giá trị không bị thiếu

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