SAS에서 JSL로 - Do 루프...저는 JSL을 배워야 하는 오랜 SAS 사용자입니다...
SAS에서 쉽게 찾은 것이 JSL에서는 너무 어려워 보입니다...
누군가 JSL을 사용하여 다음과 같은 중첩된 do 루프 테이블을 생성하는 JSL 코드를 저와 공유하여 JSL에서 Do 루프가 어떻게 작동하는지 보여줄 수 있습니까?
data frustration;
do temp = 1 to 10 by 1;
do press = 5 to 20 by 5;
do time = 1 to 1000 by 20;
output;
end;
end;
end;
run;
이러한 유형의 시뮬레이션을 만드는 것은 매우 간단해야 하지만 이해할 수 없는 것 같습니다.
스크립팅Re: SAS에서 JSL로 - Do 루프...Jeff - 늦어서 죄송합니다. 당신은 이 답장을 넘어섰고 감사합니다. 다시 확인하지 않은 이유는 내가 원하는 대로 작동하도록 할 수 있었기 때문입니다. JSL과 SAS의 차이점에 대해 설명해 주셔서 대단히 감사합니다. 정말 도움이 되었어요
Re: SAS에서 JSL로 - Do 루프...안녕 @fat_angus , JMP 사용자 및 JMP 사용자 커뮤니티에 오신 것을 환영합니다.
오랜 SAS 프로그래머로서(저도 마찬가지입니다) JMP 및 JSL에 대해 SAS에 대해 생각하는 것과는 매우 다르게 생각해야 합니다.
예를 들어 SAS DATA 단계에 대한 질문을 게시했습니다. 아시다시피 DATA 단계는 SAS 데이터셋 생성에 관한 것입니다. JSL은 대부분 JMP에서 대화식으로 수행하는 작업을 자동화하는 것이기 때문에 JSL의 DATA 단계에 직접적으로 상응하는 것은 없습니다.
그런 이유로 저는 항상 사람들이 자동화할 작업에 대해 생각하기 전에 JMP를 대화식으로 사용하는 데 충분한 기반이 있는지 확인하도록 권장합니다.
예를 들어 DATA 단계에서 생성한 데이터 테이블을 생성하려면 File->New Table...을 생성합니다.
그 다음에 열->새 열... 새 열을 추가하고 제공하려면 공식 를 사용하여 순서() 기능.

Temp columnTemp column온도 열
다른 열에 대해서도 동일한 작업을 수행합니다.
press columnpress column칼럼을 누르다
time columntime column시간 열
데이터 테이블에 행을 추가하면 다음과 같이 됩니다.

준비가 되면 데이터 테이블 이름 옆에 있는 빨간색 삼각형과 테이블 스크립트 복사로 이동할 수 있습니다.

그러면 새 테이블을 만드는 다음 스크립트가 제공됩니다.
New Table( "untitled",
Add Rows( 2000 ),
New Column( "temp",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Sequence( 1, 10, 1, 200 ) )
),
New Column( "press",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Sequence( 5, 20, 5, 50 ) )
),
New Column( "time",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Sequence( 1, 1000, 20 ) ),
)
)
물론 DATA 단계에서 설명한 테이블을 가져오는 다른 대화식 방법이 있습니다. 시퀀스로 세 개의 테이블을 만든 다음 사용할 수 있습니다. 테이블->조인 그리고 몇 가지 데카르트 조인 같은 테이블을 얻으려면. 준비가 되면 JMP에서 해당 단계에 대한 스크립트를 제공할 수 있습니다.
그럼에도 불구하고 JMP, 특히 데이터 테이블을 대화식으로 사용하는 방법을 이해하는 것부터 시작하여 스크립팅을 고려합니다. 결국 JMP가 내장 도구로 무엇을 할 수 있는지 알기 전까지는 스크립팅에 무엇이 필요한지 알 수 없습니다.
여기 커뮤니티에서 계속 배우고 계속 질문하세요. 기꺼이 도와드리겠습니다!
Re: SAS에서 JSL로 - Do 루프...훌륭한 Craige_HALES입니다!
시간을 내어 설명해 주셔서 대단히 감사합니다.
Re: SAS에서 JSL로 - Do 루프...다시 한 번 슈퍼 유저 PMROZ에게 감사드립니다. 이것은 도움이 됩니다.
Re: SAS에서 JSL로 - Do 루프...새로운 언어로 시작하는 것이 얼마나 어려운지 알 수 있는 완전한 예입니다. (도움말->스크립팅 색인과 온라인 도움말은 보완적인 리소스입니다. 저는 주로 도움말->스크립팅 인덱스를 사용하여 어떻게 작동하는지 상기시켜 줍니다. 온라인 도움말이 시작하는 데 더 나을 수 있습니다.) 여기에 필요한 것보다 조금 더 추가했습니다. 이름의 대소문자에 대한 SAS 규칙을 잊어버렸습니다...
Names Default To Here( 1 );
// what does that mean? JSL has several namespaces; the 'here' namespace is for this
// editor window and means 'press' is really 'here:press' but 'dtFrustration:press' belongs to
// the table's namespace (of column names.) You could also just use different names,
// like 'iPress' for the loop control variable. JMP's variable names are almost never
// case sensitive, the weird exception being column names, which are only sensitive <BR />// if both 'Age' and 'age' are columns...Don't do that!
// an easy way to get this table script is to make a new table with the
// JMP GUI, then use the top-left red triangle to 'Copy Table Script (No Data)'.
// By convention, JSL uses 'dt' in the variable name that holds a handle to a table.
dtFrustration = New Table( "frustration",
New Column( "temp" ), // continuous numeric by default
New Column( "press" ),
New Column( "time" )
);
// because the table might be linked to other reports, there
// is a lot of hidden messaging when the table changes. A lot.
// The messaging can be shut off and later enabled for a nice speedup.
// (to see it take longer, rerun just the loop below.)
// dtFrustration << BeginDataUpdate; // pair with EndDataUpdate, below
For( temp = 1, temp <= 10, temp++,
For( press = 5, press <= 20, press += 5,
For( time = 1, time <= 1000, time += 20,
dtFrustration << addrows( 1 );
dtFrustration:time = time;
dtFrustration:temp = temp;
dtFrustration:press = press;
)
)
);
// dtFrustration << EndDataUpdate;
Re: SAS에서 JSL로 - Do 루프...예제를 통해 배우는 것이 더 쉽다는 것을 알았으므로 이 포럼에서 찾을 수 있는 최대한 많은 코드를 살펴보십시오.일단 시작하면 스크립팅 인덱스가 진정한 친구가 될 것입니다.
JSL ~을 위한 루프 및 만약에 개념적으로는 간단하지만 처음에는 약간 당혹 스러웠습니다.학습 곡선을 단축하려면 만약에 , 이것은 함수이며 쉼표는 다음을 나타냅니다. 그 다음에 , 그렇지 않으면 그리고 또 다른 .스크립트 창을 엽니다( Ctrl-T ) 창에서 마우스 오른쪽 버튼을 클릭하고 선택합니다. 포함된 로그 표시 .아래 코드를 붙여넣고 클릭 Ctrl-R 그것을 실행합니다.a, b 및 c에 대해 서로 다른 값을 가지고 놀면서 어떤 일이 발생하는지 확인하십시오.
a = 1;
b = 2;
c = 1;
if (a == b,
// then
print("a is equal to b");
,
// else if
a == c,
// then
print("a is equal to c");
,
// else
print("No match found for a");
);
Re: SAS에서 JSL로 - Do 루프...감사합니다... 도움이 되었습니다.
Re: SAS에서 JSL로 - Do 루프...무슨 말씀하시는지...감사합니다...근데 누가 기독교를 이해하려면 성경을 읽어보라고 하는거 같은데요....스크립팅 가이드에서 2시간 정도 시간을 들여 어떻게 해야할지 찾아보았어요. 쉬운 개념... 추가로 저는 다른 스크립트를 작성하는 데 많은 성공을 거두었습니다... 하지만 솔직히 스크립팅 가이드를 보면 SAS 라이선스 예산에 20,000달러가 추가되기를 간절히 원합니다.
나는 하드 코어 코더가 아닙니다 ... 저는 일을 빨리 끝내려고 노력하는 엔지니어입니다.
Re: SAS에서 JSL로 - Do 루프...도움을 주셔서 감사합니다
Re: SAS에서 JSL로 - Do 루프...JSL에 대한 C++ 프로그래머 가이드 도움이 될 수도 있습니다. JSL for 문이 실제로 어떻게 함수인지 보여주고 이를 알면 구문을 올바르게 이해하는 것이 훨씬 쉬워집니다.
Re: SAS에서 JSL로 - Do 루프...이 모든 내용은 스크립팅 가이드에서 다룹니다. 꼭 읽어 보시기를 강력히 권장합니다.JMP의 도움말 풀다운 메뉴에서 사용할 수 있는 JMP 설명서 라이브러리에서 사용할 수 있습니다.
Re: SAS에서 JSL로 - Do 루프...JSL 학습 지원을 받을 수 있는 올바른 위치에 오셨습니다.스크립팅 인덱스는 온라인 설명서와 마찬가지로 친구입니다.
다음은 원하는 작업을 수행하는 코드 스니펫입니다.
dt = data table("frustration");
for (temp = 1, temp <= 10, temp++,
for (press = 5, press <= 20, press+=5,
for (time = 1, time <= 1000, time+=20,
show(temp, press, time); // output
);
);
);