JMP脚本:为什么我的列数据不会被发送到函数中?

时间:2014-10-29 22:03:43

标签: sas-jmp jsl

我正在为一些数据表创建一个JSL脚本,并且需要我的函数来处理列。

我可以在绘图事件期间使用函数对列进行操作,但不能使用标准操作。

这是一个有效的例子。这会对当前数据表进行处理并绘制:Column1的分布,这恰好是标称字符,其中包含4个唯一项。

a = Function(
        {col},                 // Function parameters
        {Default Local},       // Local variables
        Distribution(
            Nominal Distribution(
                Column( col ),
                Horizontal Layout( 1 ),
                Vertical( 0 )
            );
        );
    );

dt = Current Data Table();
a(Expr(:Column1));

请注意Expr()周围的:Column1。如果没有这个,分配功能就不起作用。


我尝试做的是以下内容,但它不起作用。它应该做的是显示:Column1中唯一项目的数量。

a = Function(
        {col},                 // Function parameters
        {Default Local},       // Local variables
        retval = associative array(col);
        Show(nitems(retval));
    );

dt = Current Data Table();
a(Expr(:Column1));

    Returns in Log Window:
    N Items(retval) = 0;        // Should be 4

如果我在不尝试将其包装在函数中的情况下运行脚本,那么它可以正常工作:

retval = associative array(:Column1);
Show(nitems(retval));

    Returns in Log Window:
    N Items(retval) = 4;        // My column happens to have 4 unique entries in it.

我相当肯定我的问题与函数中的命名空间有关,但我似乎无法弄明白。有没有人有任何建议?

1 个答案:

答案 0 :(得分:1)

(从我所见过的)只是一个范围操作符的问题:in:Column1。

尝试使用

a = Function(
    {col},                 // Function parameters
    {Default Local},       // Local variables
    retval = associative array(col<<Get Values)<<Get Keys;
    Show(nitems(retval));
);

dt = Current Data Table();
a(column(dt, "Column1"));

它返回了

N Items(retval) = 9;