Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

- JMP User Community
- :
- Discussions
- :
- How to "Suppress Eval" ?

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

Oct 5, 2016 2:12 PM
(1048 views)

Hello

trying to put a formula that simply counts (increments) based on the occurences of the same asset_num in time.

I like this formula to be calculated one time and then either suppress eval OR even delete formulae.

Any help will be appreciated.

below, I tried suppress eval(false) to let the formula calculate and then suppress eval(true) to suppress it...

it did not work.

thanks

::MyCntDwn2 = Function( {dt}, {Default Local},

col=New Column("Countdown",Numeric,"Continuous",Format( "Best", 12 ));

col<<Set Formula(

If( Row() > 1,

If( :asset_num == Lag( :asset_num, 1 ),

Lag( :Countdown, 1 ) + 1,

1

),

1

)

);

col << suppress eval(false);

col << suppress eval(true);

);

1 ACCEPTED SOLUTION

Accepted Solutions

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

Solution

I guess the <<suppress eval() messages are executed so fast that the formula never has time to evaluate.

Use <<Eval Formula to force column to evaluate before suppressing it:

...

col << **eval formula**;

col << **suppress eval****(**true**)**;

...

But, if you don't really need a formula you can just calculate the values once:

::MyCntDwn2 = Function**({**dt**}**,

col = dt << **New Column****(**"Countdown", Numeric, "Continuous", Format**(**"Best", **12****))**;

For Each Row**(**

col**[]** = If**(**Row**()** > **1**,

If**(**:asset_num**[]** == Lag**(**:asset_num**[]**, **1****)**,

Lag**(**col**[]**, **1****)** + **1**,

**1**

**)**,

**1**

**)**

**)**;

**)**;

3 REPLIES

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

I guess the <<suppress eval() messages are executed so fast that the formula never has time to evaluate.

Use <<Eval Formula to force column to evaluate before suppressing it:

...

col << **eval formula**;

col << **suppress eval****(**true**)**;

...

But, if you don't really need a formula you can just calculate the values once:

::MyCntDwn2 = Function**({**dt**}**,

col = dt << **New Column****(**"Countdown", Numeric, "Continuous", Format**(**"Best", **12****))**;

For Each Row**(**

col**[]** = If**(**Row**()** > **1**,

If**(**:asset_num**[]** == Lag**(**:asset_num**[]**, **1****)**,

Lag**(**col**[]**, **1****)** + **1**,

**1**

**)**,

**1**

**)**

**)**;

**)**;

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

Oct 6, 2016 3:18 AM
(956 views)

Hi Altug,

In cases like these I usually just delete the formula after:

dt = Current Data Table();

dt << new column("Countdown",

formula((Row() - Col Minimum( Row(), :asset_num )) + 1)

);

column(dt, "Countdown") << Delete Formula;

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

Oct 6, 2016 8:28 AM
(956 views)

Both of your formulaes worked. Thanks so much ...

Appreciate the help.