모두 안녕
여러 열이 있는 데이터 테이블이 있는데 그 중 일부를 함께 추가하고 싶습니다. 내 스크립트의 일부로 일부 열을 선택하고 목록에 열 이름을 저장한 다음 "합계" 기능을 사용하여 선택한 열을 추가하려고 합니다.
그렇게 하려면 문자열 ":DATA1, :DATA2, :DATA3"을 작성하고 열에서 구문 분석해야 합니다.
New Column( "Addition", Numeric, Continuous, Formula( Parse( Sum( :DATA1, :DATA2, :DATA3 ) ) ) );
내가 사용하고 있는 코드 스니펫은 다음과 같습니다.
New Column( "Addition", Numeric, Continuous, Formula( Parse( Sum( :DATA1, :DATA2, :DATA3 ) ) ) );
list = {"DATA1", "DATA2", "DATA3"};
For( i = 1, i <= N Items( list ), i++,
If(
i == 1, string = ":" || Char( Eval( list[Eval( i )] ) ),
i > 1, string = string || "," || ":" || Char( Eval( list[Eval( i )] ) )
)
);
Parse( string );
실행 시 다음 오류가 발생합니다.
예기치 않은 ",". 누락된 ";"이 있을 수 있습니다. 또는 ",".
라인 1 열 7: :DATA1►,:DATA2,:DATA3
무시된 나머지 텍스트는
,:데이터2,:데이터3
:데이터1
내가 놓친 것이 있습니까?
미리 감사드립니다!
도와주시고 설명해주셔서 감사합니다! 스크립트의 "Yet Another Data" 열은 내가 원하는 것을 정확히 수행합니다. "다른 데이터" 열은 "인수가 스칼라, 행렬 또는 목록이어야 합니다.."라는 오류와 함께 빈 셀을 반환하는 것 같습니다. 왜 이런 일이 발생하는지 알아 내려고 노력할 것입니다.
그것이 반환하는 문자열을보십시오.
":데이터1,:데이터2,:데이터3"
따옴표 없이 실행하면 같은 결과를 얻을 수 있습니다.
열 이름이 문자열인 경우 다음과 같이 할 수 있습니다.
Names default to here(1);
dt = New Table( "Example",
Add Rows( 1 ),
New Column( "Data1", Set Values( [1] )),
New Column( "Data2", Set Values( [2] )),
New Column( "Data3", Set Values( [3] )),
);
// list of column names as strings
list = dt << Get Column Names("string"); // {"Data1", "Data2", "Data3"}
SumExpr = Expr(Sum());
for(i=1, i<=nitems(list), i++,
insert into(SumExpr, Column(dt, list[i]));
);
// see what the sumExpr looks like
show(nameexpr(sumExpr));
// then you have to do some substitute in order to actually get it to run
just_for_show = EvalExpr(
dt << New Column("Another Data", Formula(Expr(nameexpr(SumExpr))));
);
show(nameexpr(just_for_show));
just_for_show();// this will actually run the expression you just created.
// or you could use the list in Sum Directly.
// list of column names as references
list = dt << Get Column Names();
list=list[1::3];
// can do a list directly in Sum()
// should still substitute it in so it's no dependant on then list variable
just_for_show =Substitute(
Expr(
dt << new Column("Yet Another Data", Formula(Sum(DV_LIST)))
),
Expr(DV_LIST), list
);
show(nameexpr(just_for_show));
just_for_show(); // actually evaluates again.