누락된 값을 0으로 바꾸기안녕하세요,
데이터 테이블의 모든 누락된 값을 0으로 바꾸려고 합니다.아래 스크립트는 작동하지 않습니다.저는 JMP 13을 사용합니다. 다른 방법이 있습니까?
dt <SPAN class="token operator">=</SPAN> <SPAN class="token function">Current Data Table</SPAN><SPAN class="token punctuation">(</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
nc <SPAN class="token operator">=</SPAN> dt <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> get column names</SPAN><SPAN class="token punctuation">(</SPAN> Numeric <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
<SPAN class="token function">For</SPAN><SPAN class="token punctuation">(</SPAN> i <SPAN class="token operator">=</SPAN> <SPAN class="token number">1</SPAN><SPAN class="token punctuation">,</SPAN> i <SPAN class="token operator"><=</SPAN> <SPAN class="token function">N Items</SPAN><SPAN class="token punctuation">(</SPAN> nc <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN> i<SPAN class="token operator">++</SPAN><SPAN class="token punctuation">,</SPAN>
nc<SPAN class="token punctuation">[</SPAN>i<SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">[</SPAN>dt <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> get rows where</SPAN><SPAN class="token punctuation">(</SPAN> <SPAN class="token function">Is Missing</SPAN><SPAN class="token punctuation">(</SPAN> nc<SPAN class="token punctuation">[</SPAN>i<SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">[</SPAN><SPAN class="token punctuation">]</SPAN> <SPAN class="token punctuation">)</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">]</SPAN> <SPAN class="token operator">=</SPAN> <SPAN class="token number">0</SPAN>
<SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
감사해요!
Re: 누락된 값을 0으로 교체>> 숫자 열의 누락된 값을 "N/A" 문자열로 대체할 수 있습니까?
그렇게 하려면 값 레이블을 사용하십시오. 열 머리글을 마우스 오른쪽 버튼으로 클릭하고 열 속성으로 이동하여 값 레이블을 선택합니다. 그런 다음 아래와 같이 값에 마침표를 입력하고 레이블 필드에 N/A를 입력합니다. 그런 다음 추가를 클릭한 다음 확인을 클릭합니다.
스크립트를 작성하려면 위 단계의 로그 레코더를 따르십시오...
데이터 테이블( "DT 이름" ):열 904 << 값 레이블( {"." = "N/A"} ) << 값 레이블 사용( 1 );

Re: 누락된 값을 0으로 교체숫자 열의 누락된 값을 "N/A" 문자열로 바꿀 수 있습니까?
Re: 누락된 값을 0으로 교체친애하는 이안과 크레이지에게,
제출해 주셔서 감사합니다. 몇 가지 예비 테스트를 실행했는데 Ian의 솔루션이 Recode보다 4배 이상 빠르고 Craige의 솔루션이 거의 10배 더 빠릅니다. 세 가지 솔루션을 모두 비교하고 싶은 사람이 있으면 다음을 시도하십시오.
//Recode solution
nr = 10000; // Number of rows
nc = 10000; // Number of columns
nm = 0.9; // Proportion of missing values
// Make a table and inject some missing values
mat = J(nr*nc, 1, RandomNormal());
mat[RandomIndex(nr*nc, nr*nc*nm)] = .;
dt = AsTable(Shape(mat, nr, nc));
dt << setName("Data with some missingness");
replaceMissingStart = HP Time();
// replace missings with zeros
nc = dt << get column names( Numeric );
For( i = 1, i <= N Items( nc ), i++,
col = Column(dt,nc[i]);
colname = col << getname();
Eval(Parse(EvalInsert("\[
dt << Recode Column(
:Name("^colname^"),
{Map Value( _rcOrig, {., 0}, Unmatched( _rcNow ) )},
Update Properties( 1 ),
Target Column( :Name("^colname^") )
);
]\")));
//Code from the Community
//Column( nc[i] )[dmdt << get rows where( Is Missing( As Column( nc[i] ) ) )] = 0;
// standardize column attributes, change all to nominal
//col << Set Modeling Type( "Nominal" )
);
replaceMissingStop = HP Time();
totalReplaceTime = replaceMissingStop-replaceMissingStart;
show(totalReplaceTime/1000000);
Russ Wolfinger는 행렬이 문제를 더 빨리 해결할 것이라고 생각했다고 말했습니다. 제 생각에 두 분도 그렇게 생각하셨을 것 같습니다!
Re: 누락된 값을 0으로 교체솔루션 결합, 데이터 테이블 첨자화...
nr = 10000; // Number of rows
nc = 10000; // Number of columns
nm = 0.9; // Proportion of missing values
// Make a table and inject some missing values
mat = J(nr*nc, 1, RandomNormal());
mat[RandomIndex(nr*nc, nr*nc*nm)] = .;
dt = AsTable(Shape(mat, nr, nc));
dt << setName("Data with some missingness");
replaceMissingStart = HP Time();
nc = dt << get column names( Numeric );
mat = dt[0,nc];
mat[Loc(mat, .)] = 0;
dt[0,nc] = mat;
replaceMissingStop = HP Time();
totalReplaceTime = replaceMissingStop-replaceMissingStart;
show(totalReplaceTime/1000000);
약 10초.
Re: 누락된 값을 0으로 교체FWIW, 이런 종류의 접근 방식이 더 나을 수 있습니다. 10,000 x 10,000의 경우 내 노트북에서 약 10초가 걸렸습니다(시작 테이블 만들기 포함).
NamesDefaultToHere(1);
// Size the problem . . .
nr = 10000; // Number of rows
nc = 10000; // Number of columns
nm = 0.1; // Proportion of missing values
// Make a table and inject some missing values
mat = J(nr*nc, 1, RandomNormal());
mat[RandomIndex(nr*nc, nr*nc*nm)] = .;
dt = AsTable(Shape(mat, nr, nc));
dt << setName("Data with some missingness");
// Start here: Get values into a matrix (assumes contiguous numeric columns)
mat = dt << getAsMatrix;
// Reshape as a vector
mat = Shape(mat, nr*nc, 1);
// Replace missing
mat[Loc(mat, .)] = 0;
// Reshape back to a matrix
mat = Shape(mat, nc, nc);
// Make a new table
dt2 = AsTable(Shape(mat, nr, nc));
dt2 << setName("Data with missing set to zero values");
Re: 누락된 값을 0으로 교체모두 안녕
저는 수백 개의 누락된 행이 있는 수백 개의 열로 이 정확한 문제를 해결하기 위해 노력해 왔습니다. 나는 성능에 만족하지 않았고 많은 접근 방식을 시도했습니다. Recode는 현재 솔루션보다 약 150배 빠르게 이 문제를 해결하는 것으로 보입니다. 속도에 관심이 있는 다른 사람과 코드를 공유합니다. 더 빠른 것을 찾으면 알려주세요. 매 밀리초가 중요합니다! 
</CODE></P>
<PRE><CODE class=" language-jsl">replaceMissingStart = HP Time();
// replace missings with zeros
nc = dmdt << get column names( Numeric );
For( i = 1, i <= N Items( nc ), i++,
col = Column(dt,nc[i]);
colname = col << getname();
Eval(Parse(EvalInsert("\[
dmdt << Recode Column(
:Name("^colname^"),
{Map Value( _rcOrig, {., 0}, Unmatched( _rcNow ) )},
Update Properties( 1 ),
Target Column( :Name("^colname^") )
);
]\")));
//Code from the Community
//Column( nc[i] )[dmdt << get rows where( Is Missing( As Column( nc[i] ) ) )] = 0;
// standardize column attributes, change all to nominal
col << Set Modeling Type( "Nominal" )
);
replaceMissingStop = HP Time();
totalReplaceTime = replaceMissingStop-replaceMissingStart;
show(totalReplaceTime/1000000);
</CODE></P>
<P>아이디어를 주신 Rebecca Lyzinski에게 감사드립니다!!!</P></LINGO-BODY><LINGO-SUB id="lingo-sub-228122" slang="en-US" mode="NONE">Re: 누락된 값을 0으로 교체</LINGO-SUB><LINGO-BODY id="lingo-body-228122" slang="en-US" mode="NONE"><P>이 스크립트를 지속적으로 사용합니다.제공해 주셔서 감사합니다.</P></LINGO-BODY><LINGO-SUB id="lingo-sub-65695" slang="en-US" mode="NONE">Re: 누락된 값을 0으로 교체</LINGO-SUB><LINGO-BODY id="lingo-body-65695" slang="en-US" mode="NONE"><P>스크립트를 좀 더 구체적으로 작성해 보세요.</P>
<P>특정 열이 있는 데이터 테이블에 핸들을 제공하십시오. 마찬가지로 dt=table(); 또는 그런 것.</P>
<P>그런 다음 테이블의 열 dt::nameOFCol을 참조하십시오.</P>
<P> </P>
<P>스크립트가 이 단계가 실행될 때 현재 테이블에 존재하지 않는 열을 수정하려고 할 가능성이 있습니다.</P></LINGO-BODY><LINGO-SUB id="lingo-sub-65039" slang="en-US" mode="NONE">Re: 누락된 값을 0으로 교체</LINGO-SUB><LINGO-BODY id="lingo-body-65039" slang="en-US" mode="NONE"><P>이와 같은 것은 설명에서 진단하기 어렵습니다.우리가 도와줄 수 있도록 스크립트(또는 적어도 문제를 재현하기에 충분한 스크립트)를 게시해야 할 것입니다.</P></LINGO-BODY><LINGO-SUB id="lingo-sub-64972" slang="en-US" mode="NONE">Re: 누락된 값을 0으로 교체</LINGO-SUB><LINGO-BODY id="lingo-body-64972" slang="en-US" mode="NONE"><P>안녕 카메론,</P><P> </P><P>JMP를 다시 시작했는데 스크립트가 특정 데이터 테이블에서 제대로 작동합니다.누락된 값은 0으로 대체됩니다.그러나 스크립트의 나머지 부분에 통합하면 아래와 같은 오류가 발생합니다.</P><P><EM><FONT color="#FF0000">액세스 또는 'Column' 평가에서 열을 찾을 수 없습니다. Column/*###*/(nc[i])</FONT></EM></P><P> </P><P>이 스크립트에 앞서, 선택한 열을 기준으로 하위 집합을 만들고, 데이터를 쌓고, 요약하고, 최종 데이터 테이블로 표로 만드는 원본 데이터 테이블이 있습니다.최종 데이터 테이블의 누락된 값을 0으로 바꾸려고 합니다. </P><P> </P><P>저는 JMP 스크립트를 처음 접했고 통합이 왜 문제를 일으키는지 잘 모르겠습니다.왜 이런 일이 일어나는지 아십니까?</P><P> </P><P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-64943" slang="en-US" mode="NONE">Re: 누락된 값을 0으로 교체</LINGO-SUB><LINGO-BODY id="lingo-body-64943" slang="en-US" mode="NONE"><P>안녕<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/12425" target="_blank"> @nshivan</A> ,</P><P>버전 13과 14에서 Jim의 코드를 실행했는데 오류가 발생하지 않았습니다.JMP를 다시 시작하고 다시 실행할 수 있습니까?</P></LINGO-BODY><LINGO-SUB id="lingo-sub-64931" slang="en-US" mode="NONE">Re: 누락된 값을 0으로 교체</LINGO-SUB><LINGO-BODY id="lingo-body-64931" slang="en-US" mode="NONE"><P>안녕 짐,</P>
<P> </P>
<P>위와 같이 시도했지만 다음과 같은 오류가 발생합니다.</P>
<P> </P>
<P> </P>
<PRE><CODE class=" language-jsl">could not find column in access or evaluation of 'Column' , Column/*###*/(nc[i])
무슨 일인지 아세요?저는 JMP 13을 사용하는데 이 버전에서 구문이 작동하지 않는지 잘 모르겠습니다.
감사해요,
N
Re: 누락된 값을 0으로 교체수행하려는 작업에 대한 올바른 구문은 다음과 같습니다.
dt = Current Data Table();
nc = dt << get column names( Numeric );
For( i = 1, i <= N Items( nc ), i++,
Column( nc[i] )[dt << get rows where( Is Missing( As Column( nc[i] ) ) )] = 0
);