안녕하세요,
현재 작업에 매우 유용한 스크립트가 포함된 2015년 토론("sumif" 주제)을 찾았습니다. 거기에 질문을 썼지만 해당 토론에 참여한 사람들이 내 질문을 볼 수 있는지 모르겠습니다.
내가 찾은 이 스크립트(약간 수정됨)는 값이 "0/0"(또는 무엇이든)인 각 행의 열을 계산하는 데 효과적입니다.
dt << New Column("Sum",
Numeric, Formula(
Local({i = 0, n = N Col(Current Data Table()) - 1},
Sum(Repeat({i++ ; (Column(i)[] =="0/0")}, n))
)
)
);그러나 "some_character"를 포함하는 열을 계산하기 위해 이 스크립트를 편집하는 방법은 무엇입니까?
마지막 열 "Sum"에 수식이 있고 결과 숫자가 필요한 데이터 테이블을 첨부했습니다.
저는 큰 데이터 테이블을 가지고 있으며 특정 값(문자)을 가진 각 행의 열을 계산하는 스크립트를 갖고 싶습니다.
위의 스크립트를 수정하려고 시도했지만 작동하지 않습니다.
dt << New Column("Miss",
Numeric, Formula(
Local({i = 0, n = N Col(Current Data Table()) - 1},
Sum(Repeat({i++ ; (Contains(Column(i)[],"."))}, n))
)
)
);</CODE>Please, help</P><P>발렌티나</P></LINGO-BODY><LINGO-LABS id="lingo-labs-737490" slang="en-US" mode="CREATE"><LINGO-LABEL>자동화 및 스크립팅</LINGO-LABEL></LINGO-LABS><LINGO-SUB id="lingo-sub-737514" slang="en-US" mode="CREATE">Re: sumif: 문자가 포함된 경우 열 개수 계산</LINGO-SUB><LINGO-BODY id="lingo-body-737514" slang="en-US" mode="CREATE"><P>이에 대한 공식이 필요합니까?</P></LINGO-BODY><LINGO-SUB id="lingo-sub-737576" slang="en-US" mode="CREATE">Re: sumif: 문자가 포함된 경우 열 개수 계산</LINGO-SUB><LINGO-BODY id="lingo-body-737576" slang="en-US" mode="CREATE"><P>죄송합니다. 질문을 이해하지 못했습니다.</P><P>~500,000개의 행과 ~3,000개의 열이 있는 테이블이 있습니다. 점이 포함된 열의 합계를 계산해야 합니다. 수식을 사용할 수 없습니다. .</P><P>저는 작동하는 어떤 스크립트든 스크립트를 갖고 싶습니다. 나는 다른 접근법을 시도했지만 아무것도 효과가 없었습니다. .</P></LINGO-BODY><LINGO-SUB id="lingo-sub-737577" slang="en-US" mode="CREATE">Re: sumif: 문자가 포함된 경우 열 개수 계산</LINGO-SUB><LINGO-BODY id="lingo-body-737577" slang="en-US" mode="CREATE"><P>이것은 내 로그에서 가져온 것입니다:</P><P> </P><P>열 합계 수식이 중단되었습니다.<BR /> 'Contains' 액세스 또는 평가 시 421001행의 인수 유형이 잘못되었습니다. 잘못된 인수( Column( i )[] ), Contains/*###*/(Column( i )[], ".")<BR /> 수식 평가 오류가 무시되었습니다.</P></LINGO-BODY><LINGO-SUB id="lingo-sub-737582" slang="en-US" mode="CREATE">Re: sumif: 문자가 포함된 경우 열 개수 계산</LINGO-SUB><LINGO-BODY id="lingo-body-737582" slang="en-US" mode="CREATE"><P>루프가 문자 열이 아닌 일부 열에 도달했을 가능성이 높습니다. 이 부분은 아마도 약간의 수정이 필요할 것 같습니다</P>
<PRE><CODE class=" language-jsl">n = N Col(Current Data Table()) - 1
데이터에 대한 지식 없이는 어떻게 수행되어야 하는지 알기가 매우 어렵습니다. -1을 간단히 수정하거나 문자 열 목록을 가져오거나 일종의 패턴으로 통과할 열을 계산하는 것일 수도 있습니다.
내 게시물에 작은 데이터 테이블을 첨부했습니다. 헤더와 함께 3개의 행과 3개의 열이 있습니다.
시즌1 시즌2 시즌3
0/0./. 0/0
./. ./. ./.
0/0 0/0 0/0
이 샘플 테이블에서는 스크립트가 작동하지 않습니다.
열 합계 수식이 중단되었습니다.
인수가 'Contains' 액세스 또는 평가에서 행 1의 유형이 잘못되었습니다. 잘못된 인수( Column( i )[] ), Contains/*###*/(Column( i )[], ".")
수식 평가 오류가 무시되었습니다.
첨부한 원래 데이터 테이블은 4개의 열이 있으므로 그렇지 않았습니다(합계 열은 무시할 수 없음).

데이터에 따라 수식을 사용하는 경우 이 작업을 수행하는 방법이 있습니다(아마도 이를 피하고 순수 스크립트 솔루션을 사용할 것입니다).
Names Default To Here(1);
dt = Open("$DOWNLOADS/sum_help_data.jmp");
dt << Delete Column("Sum");
dt << New Column("Miss", Numeric, Continuous, Formula(
As Constant(
cols_of_interest = Filter Each({colname}, Current Data Table() << Get Column Names("String"),
!IsMissing(Regex(colname, "S\d"));
);
);
Local({
res = 0;
},
For Each({colname}, cols_of_interest,
res = res + (Contains(Column(colname)[], ".") > 0);
);
res;
);
));
예, 모든 데이터는 동일한 유형이어야 하는 것 같습니다.
감사합니다 - 작동합니다!