JSL: 열을 반복하고, Graph Builder 보고서를 생성하고, 각각을 JPG 파일로 저장하는 방법지정된 값보다 작거나 큰 셀 수를 계산하기 위해 각 열의 각 셀을 반복할 수 있는 스크립트를 만들려고 합니다.
열 A ~ D와 행 1 ~ 10의 테이블이 있는 경우 셀의 행 및 열 값을 계산하고 싶습니다. 즉, 열 A의 모든 행에 대해 내 기준을 충족하는 행 수입니다. 마찬가지로 행 1의 모든 열에 대해 얼마나 많은 열이 내 기준을 충족하는지. 그런 다음 모든 행과 열에 대해 이 작업을 수행합니다.
다음은 ive가 시작하려고 시도했지만 아무것도 반환하지 않습니다. 이것에 대한 아이디어나 더 효율적인 방법이 있습니까?
Names Default To Here( 1 );
dt = Current Data Table();
Clear Log();
// Get all of the numeric columns in the data table
Numeric Columns = dt << get column names( numeric, string );
NRows = N Rows( dt );
Count = {};
//Column loop
For( i = 1, N Items( Numeric Columns ) <= 1, i++,
For Each Row(
dt,
If( Column(dt, Numeric Columns[i]) < 101,
Count = Count++;
Show( Count );
)
)
);
Re: JSL: 열을 반복하고, Graph Builder 보고서를 생성하고, 각각을 JPG 파일로 저장하는 방법"각 행에 대해" 섹션을 행으로 대체하여 각 열의 행 수를 계산할 수도 있습니다.이렇게 하면 각 열의 각 행을 살펴볼 필요 없이 데이터 테이블 함수를 활용할 수 있습니다.
COUNT_VAL=NROWS((DT<<SELECT where=""></SELECT>
Re: JSL: 열을 반복하고, Graph Builder 보고서를 생성하고, 각각을 JPG 파일로 저장하는 방법스크립트에는 쉽게 고칠 수 있는 몇 가지 문제가 있습니다.
1. for 루프의 테스트 부분이 잘못되었습니다.
<SPAN class="token function">N Items</SPAN><SPAN class="token punctuation">(</SPAN> Numeric Columns <SPAN class="token punctuation">)</SPAN> <SPAN class="token operator"><=</SPAN> <SPAN class="token number">1</SPAN>
숫자 열의 수는 변경되지 않습니다. 0 또는 1개의 숫자 열이 있는 경우 0<=1 및 1<=1이므로 루프가 영원히 실행됩니다. 최소 2개의 숫자 열이 있는 경우 2(또는 그 이상)<=1이 항상 거짓이기 때문에 루프가 전혀 실행되지 않습니다. 테스트는 다음과 같아야 합니다.
i <= N Items( Numeric Columns )
반복자(i)가 열 수보다 큰지 여부를 테스트하고 그럴 때 중지합니다.
2. For Each Row 루프에서 여전히 행에 첨자를 추가해야 하며 반복을 직접 관리할 필요가 없습니다. 그래서 이 작품:
<SPAN class="token function">Column</SPAN><SPAN class="token punctuation">(</SPAN>dt<SPAN class="token punctuation">,</SPAN> Numeric Columns<SPAN class="token punctuation">[</SPAN>i<SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">)</SPAN> <SPAN class="token operator"><</SPAN> <SPAN class="token number">101</SPAN>
다음과 같아야 합니다.
<SPAN class="token function">Column</SPAN><SPAN class="token punctuation">(</SPAN>dt<SPAN class="token punctuation">,</SPAN> Numeric Columns<SPAN class="token punctuation">[</SPAN>i<SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">)[Row()]</SPAN> <SPAN class="token operator"><</SPAN> <SPAN class="token number">101</SPAN>
삼. Count 변수는 목록이지만 숫자처럼 취급하고 있습니다. Count++는 숫자로 채워지지 않은 목록에는 아무 작업도 수행하지 않습니다. Count = {} 대신 Count = 0을 설정합니다. 또한 Count++는 현재 값을 반환한 다음 Count를 Count +1로 설정합니다. 따라서 Count = Count++는 절대 Count의 값을 변경하지 않습니다. (예: 개수 = 0. 카운트 = 카운트++. 카운트는 여전히 0입니다.)
위의 변경 사항이 포함된 전체 스크립트는 다음과 같습니다. 끝 개수는 101보다 작은 모든 숫자 열의 셀 수입니다.
Names Default To Here( 1 );
dt = Current Data Table();
Clear Log();
// Get all of the numeric columns in the data table
Numeric Columns = dt << get column names( numeric, string );
NRows = N Rows( dt );
Count = 0;
//Column loop
For( i = 1, i <= N Items( Numeric Columns ), i++,
For Each Row(
dt,
If( Column(dt, Numeric Columns[i])[Row()] < 101,
Count++;
Show( Count );
)
)
);
HTH,
멜라니
Re: JSL: 열을 반복하고, Graph Builder 보고서를 생성하고, 각각을 JPG 파일로 저장하는 방법@abdulj ,
테스트하려는 조건을 식별하기 위해 행렬을 사용할 수 있습니다. 다음은 예입니다.
Clear Log();
// Open a sample data set
dt = Open( "$SAMPLE_DATA/Cars.jmp" );
// Extracting numeric column names
ColNames = dt << Get Column Names("String");
NumericCols = [];
for(nCol = 1, nCol <= N Items(ColNames), nCol++,
DType = Column(dt,nCol) << Get Data Type;
If(DType == "Numeric",
NumericCols = NumericCols || nCol;
);
);
NumericColNames = ColNames[NumericCols];
// Extract numeric data only
Mat = dt << Get As Matrix;
// Row Wise Test
// For e.g. Find all rows where year < 90
YearCondition = Loc(Mat[0,1] < 90);
Show(Mat[YearCondition,0]);