2016-04-04 22 views
0

SAS ile ilgili bir sorunuz varsa ne olur? aşağıdaki programı olduğunu düşünelim: Ben her zaman emin veri aralıklarını yapmalıdır biliyorumSAS Eğer boşluklar ile analiz veri aralığı

data work.stress; 
infile tests; 
input ID Name $ Tolerance; 
if tolerance <= 5 then tolerance = "Low"; 
else if tolerance >= 6 then tolerance = "High"; 
run; 

aralarında hiçbir boşluk vardır, ama sadece bu koşuyoruz programı IS demek, ne olur bir toleransa sahip bir gözlem var 5.5 olarak? Çıktıda bir Sözdizimi hatası gösterilecek mi?

Teşekkürler!

JessX

cevap

0

if-then-else kullanarak/else eğer herhangi bir sığacak şekilde başarısız kaynaklanan herhangi bir sentaks hatası yoktur; Sadece bir şey yapmıyor. Yani sizin durumunuzda, değeri 5.5 ise, tolerance orijinal değerine sahip olacaktır.

data work.stress; 
    infile tests; 
    input ID Name $ Tolerance; 
    if tolerance <= 5 then tolerance = .L; 
    else if tolerance >= 6 then tolerance = .H; 
run; 

(Aslında, yapar: Eğer özel genellikle eksik kullanmayı tercih ediyorum gerçi Bu genellikle, sen aşırı değerleri sansür isteyen durumlarda bitmiş olacaktır (eğer analiz dışında bu aşırı değerlere istiyorum varsayarak) "Yüksek" "Düşük" gruplar için değerleri yazdınız, siz bunları yazdığınız sırada, sayısal bir değer olarak tanımladığınızdan.)

select-when kullanırsanız, her bir olası değeri hesaba katmanız gerekir. otherwise yok, when tarafından kapsanmayan herhangi bir değerde başarısız olur. Bu, select-when'u kullanmanın neden yararlı olduğunun bir parçasıdır.

0

Bir hata var, ama bahsetmek için değil. Bir sayıyı bir dizeyle değiştirmeyi denerseniz, SAS buna izin vermez.

iki olası caddeler:

  1. Eğer eşikleri belirtmek nerede proc format kullanarak bir format bildirin. Eşiklerinizdeki çatlaklar arasında kalan değerler sadece (sayısal) oldukları gibi görüntülenecektir.
  2. Yeni bir değişken oluşturun.

    data work.stress; 
        infile tests(rename=(Tolerance=Tol_num)); 
        input ID Name $ Tolerance; 
        format tolerance $8.; 
        if tol_num = . then tolerance = "?"; 
        else if tol_num <= 5 then tolerance = "LOW"; 
        else if tol_num >= 6 then tolerance = "HIGH"; 
        else tolerance = "MID"; 
        drop tol_num; 
    run; 
    
    : Bir "MID" kategorisi eklemek sürece, yeni tolerance değişken için eksik değere sahip olacak 5 ile 6 arasında düşer ne olursa olsun bu örnekte,