JSL과의 일치를 계산하는 방법은 무엇입니까?여러분, 안녕하세요!
엑셀에서는 "=offset(,match(,,)-1,match(,,)-1,,)" 함수를 사용하여 계산할 수 있지만, 데이터가 클 경우 속도가 느려집니다.
JSL로 이 작업을 수행하는 방법?고마워요!
Re: JSL과의 일치를 계산하는 방법은 무엇입니까?네, 엑셀은 10,000행 이내의 워크시트 기능을 사용하는 것이 편리합니다.
10,000개 이상의 행은 VBA 사전으로 이 작업을 수행하는 데 익숙합니다. 그러나 100,000개 이상의 사전은 느립니다.
이제 JMP의 이 방법을 사용하면 1천만 개 이상의 라인도 빠릅니다. 감사합니다!Re: JSL과의 일치를 계산하는 방법은 무엇입니까?나는 당신의 마지막 회신에서 진술의 JMP 사용자 커뮤니티에 대한 이점을 보지 못했습니다.
" Excel에서 사전을 사용하는 것도 빠릅니다… Set d = CreateObject("Scripting.Dictionary") "
엑셀토론포럼에 이런 댓글이 더 어울릴듯
Re: JSL과의 일치를 계산하는 방법은 무엇입니까?당신의 도움을 주셔서 대단히 감사합니다.
Excel에서 사전을 사용하는 것도 빠릅니다… Set d = CreateObject("Scripting.Dictionary")
그러나 백만 개 이상의 라인은 다르게 수행되어야 합니다.Re: JSL과의 일치를 계산하는 방법은 무엇입니까?다음은 다양한 수의 열로 스택하는 몇 가지 방법입니다. 오늘 Excel에서 match를 사용하는 경우 처음 두 가지 방법 중 하나가 작동할 가능성이 높습니다.
//If the column positions do not change
d3_1 = d1 << Stack(
columns( Concat( [2 3], 4::10 )),
Source Label Column( "year" ),
Stacked Data Column( "data" ),
Drop all other columns( 1 ),
Keep( :state )
);
//If you want all columns
d1_clean = ( d1 << Subset( All rows, columns( 1::10 ) ) );
d3_2 = d1_clean << Stack(
columns( 2:: ncol(d1_clean) ),
Source Label Column( "year" ),
Stacked Data Column( "data" ),
Drop all other columns( 1 ),
Keep( :state )
);
//If the column names are in a specific format
// - get column names
cn = d1 << Get Column Names( string );
// - Find which columns match a format
// (jmp does have some patter matching tools but I like regex, check out regexr.com)
matches = repeat(0, N Items(cn));
for(c=1, c<= N Items(cn), c++, if(!is missing(Regex(cn[c], "^\d+$")), matches[c] = 1));
// - Stack
d3_3 = d1 << Stack(
columns( loc(matches) ),
Source Label Column( "year" ),
Stacked Data Column( "data" ),
Drop all other columns( 1 ),
Keep( :state )
);
Re: JSL과의 일치를 계산하는 방법은 무엇입니까?이러한 열이 1000개 이상과 같이 많은 경우… 날짜라고 가정해 보겠습니다.
이 열은 어떻게 가변 루프 형태로 d3 테이블 설정을 구현합니까? 감사합니다!

Re: JSL과의 일치를 계산하는 방법은 무엇입니까?잘했어! 고마워!Re: JSL과의 일치를 계산하는 방법은 무엇입니까?큰 테이블의 경우 속도가 걱정되기 때문에 긴 형식의 '조회 테이블'을 만들어 값당 하나의 행이 있도록 한 다음 Join 또는 Update와 함께 사용하여 조회를 수행할 수 있습니다.다음과 같이 보일 수 있습니다.
Names default to here( 1 );
d1 = Open( "$SAMPLE_DATA/Presidential Elections.jmp" );
d2 = New Table( "offset",
Add Rows( 8 ),
New Column( "State",
Character,
"Nominal",
Set Values(
{"Wyoming", "Montana", "Montana", "Alaska", "Wisconsin", "Nebraska", "Nevada", "Montana"}
)
),
New Column( "year",
Character,
"Ordinal",
Set Values( {"1988", "1988", "1988", "1992", "2000", "1992", "2004", "1980"} )
),
New Column( "data",
Numeric,
"Continuous",
Format( "Fixed Dec", 12, 1 ))
);
//Move data to a long format
d3 = d1 << Stack(
columns(
:Name( "1980" ),
:Name( "1984" ),
:Name( "1988" ),
:Name( "1992" ),
:Name( "1996" ),
:Name( "2000" ),
:Name( "2004" ),
:Name( "2008" ),
:Name( "2012" )
),
Source Label Column( "year" ),
Stacked Data Column( "data" )
);
d3 << Set Name( "Long format" );
d3:year << Set Modeling Type("Ordinal");
//'Lookup' the values:
d2 << Update( with(d3), Match Columns( :state=:state, :year=:year ), Add Columns from Update table( None ));
d3 << Close window;
Re: JSL과의 일치를 계산하는 방법은 무엇입니까?"대통령 선거" 테이블의 데이터를 기반으로 "오프셋" 테이블의 "데이터" 값을 계산합니다.
고맙습니다!Re: JSL과의 일치를 계산하는 방법은 무엇입니까?d1 = 열기( "$SAMPLE_DATA/대통령 선거.jmp" );
d2 = 새 테이블( "오프셋",
행 추가( 8 ),
새 열( "상태",
성격,
"명사 같은",
값 설정(
{"와이오밍", "몬타나", "몬태나", "알래스카", "위스콘신", "네브래스카", "네바다", "몬타나"}
)
),
새 열( "연도",
성격,
"명사 같은",
값 설정( {"1988", "1988", "1988", "1992", "2000", "1992", "2004", "1980"} )
),
새 열( "데이터", 문자, "명목", ),
);