2017-11-02 19 views
0

그래서 이분 산성에 대한 여러 테스트를 만들도록 가르쳐야 할 SAS의 연습을하고 있습니다. 테스트를 수행 한 후 변수를 수정하기 위해 테스트 잔여를 유지해야합니다.Sas 테이블 자체가 비 웁니다.

그러나 d 테이블은 항상 0 관측으로 끝납니다. 원래 데이터 세트를 기반으로했기 때문에 d 테이블은 마치 자체가 비어있는 것처럼 보입니다. 나는 그것에 3 시간을 보냈다, 나는 그것이 그것을 할 것 인 이유를 이해할 수 없다. 여러 대의 기계에서 여러 번 발생했습니다. I이었다 가지고

libname mag "/folders/myfolders/data/"; 

data c; set mag.drogue; 
lg_pxogramme= log(pxogramme); 
lg_qtitegramme= log(qtitegramme); 
run; 
data d; set c; 
run; 

/*2. App Brandt*/ 
proc contents data=c; 
proc reg data=c; 
model lg_pxogramme= lg_qtitegramme puretemoy /spec; 
output out=d r=r_hat; 
run; 

/*3.*/ 
data d; 
lg_pxogramme= log(pxogramme); 
lg_qtitegramme= log(qtitegramme); 
r_2= r_hat**2; 
run; 
proc reg data=d; 
model r_2= lg_qtitegramme puretemoy; 
output out=d p=p_hat; 
run; 
data d; 
pxogramme_c= lg_pxogramme/p_hat; 
qtitegramme_c= lg_qtitegramme/p_hat; 
puretemoy_c= puretemoy/p_hat; 
run; 
proc reg data=d; 
model pxogramme_c= qtitegramme_c puretemoy_c; 
run; 

두 개의 오류 :

  • ERROR : 변수 PURETEMOY하지 발견

    여기 내 코드입니다.

  • 오류 : 유효한 관측치가 없습니다.

아마도 데이터 단계 이후에 테이블이 비어 있었기 때문에 모델을 지정하면 두 오류가 표시됩니다.

+0

코드 끝에서 처음으로'd' 테이블을 만들 때 SAS가 데이터 단계를 실행하지 못하게하는 오류가 있으면 출력 테이블이 비어 있습니다. 'PURETEMOY' 컬럼이 존재하지 않는 이유를 확인하십시오. – Petr

답변

0

이 같은 문에서 설정 한 D 데이터를 다시 만들 SAS가 수행 한 작업을 확인하기 위해 SAS 로그를 읽도록 SAS에 요청한 내용. 각 단계마다 읽은 데이터와 작성한 데이터가 표시됩니다.

몇 가지 프로그램 단계를 살펴 보겠습니다.

먼저 기존 데이터 집합을 읽고 C을 만듭니다. 새로운 변수를 두 개 생성하면됩니다.

data c; 
    set mag.drogue; 
    lg_pxogramme= log(pxogramme); 
    lg_qtitegramme= log(qtitegramme); 
run; 

그런 다음이 데이터 세트를 D에 복제합니다.

data d; 
    set c; 
run; 

그런 다음 코드는 회귀 분석의 결과를 D으로 덮어 씁니다. OUTPUT 성명서의 OUT=D을 참조하십시오. 다시 입력 된 데이터가없는 데이터를 이용하여 단계 D을 덮어 그 후

proc reg data=c; 
    model lg_pxogramme= lg_qtitegramme puretemoy /spec; 
    output out=d r=r_hat; 
run; 

. 따라서 하나의 관찰과 6 개의 누락 된 변수가있는 D이 생성됩니다.

data d; 
    lg_pxogramme= log(pxogramme); 
    lg_qtitegramme= log(qtitegramme); 
    r_2= r_hat**2; 
run; 

먼저이 단계를 수정하십시오. 읽을 데이터를 알려면 SET 문을 추가해야합니다. 회귀의 결과를 덮어 쓰지 않도록 다른 출력 데이터 세트를 사용해야합니다. 당신은 회귀의 결과를 읽고 싶습니까? C 데이터 세트 첫 번째 단계가 생성 되었습니까? C을 만드는 데 사용 된 원본 영구 데이터 집합?

+0

출력을 다른 테이블에 넣습니다 (전자라고 부름). "d e"를 사용하여 d와 병합했습니다. 프로그램이 실행 된 후 d의 출력 값을 찾을 수 없었지만 완벽하게 작동했습니다. 이상하지만 OK 나는 추측한다. –

2

첫 번째 단계에서는 c이라는 데이터 집합을 만든 다음 d이라는 복사본을 만듭니다. 두 번째 단계에서 데이터 세트 dd 데이터 세트의 proc reg 출력으로 바꾸고 proc reg 문에 out=d을 지정합니다.

세 번째 단계에서는 dataproc 단계마다 다시 d을 덮어 씁니다. data d; 단계에서는 존재하지 않는 변수의 값을 지정하기 때문에 누락 된 값의 레코드가 하나만있는 아무 것도없는 (no set 문) 때마다 새 데이터 집합을 만듭니다. proc reg 단계에서 d (data=d)을 읽고 d (out=d)으로 결과를 겹쳐 써서 결과를 덮어 씁니다.

data d; 
set d; 
lg_pxogramme= log(pxogramme); 
lg_qtitegramme= log(qtitegramme); 
r_2= r_hat**2; 
run; 
0

번 확인 :

data d; 
lg_pxogramme= log(pxogramme); 
lg_qtitegramme= log(qtitegramme); 
r_2= r_hat**2; 
run; 

당신은 오래된 사본을 포함하려는 경우, 당신은 set 문을 추가해야합니다