Our World Statistics Day conversations have been a great reminder of how much statistics can inform our lives. Do you have an example of how statistics has made a difference in your life? Share your story with the Community!
Choose Language Hide Translation Bar
Highlighted

## How can i subtract row value from previous value and continue til end of table? rows have mx values

Here is the sample. Delta column is what I am trying to acheive. Part# are category.

 Part# Data Delta 1 4 4 - 4 2 5 5 - 5 3 6 6 - 6 1 7 4 - 7 2 8 5 - 8 3 9 6 - 9 1 10 7 - 10 2 11 8 - 11 3 12 9 - 12
1 ACCEPTED SOLUTION

Accepted Solutions
Highlighted

## Re: How can i subtract row value from previous value and continue til end of table? rows have mx val

Do I need to define "Delta Pattern" column?

6 REPLIES 6
Highlighted

## Re: How can i subtract row value from previous value and continue til end of table? rows have mx val

As a column formula

``If( Row() <= 3, :Data, :Data - Row() );``

In a Script

``````For Each Row(
If( Row() <= 3, :Delta = :Data, :Delta = :Data - Row() );
);``````
Jim
Highlighted

## Re: How can i subtract row value from previous value and continue til end of table? rows have mx val

Hi Jim,

thanks for prompt response.

this works in case the row number lines up with values in Data column for subtraction. what if there are random values in Data column and want to consider the raw values of data columns for subtraction?

Highlighted

## Re: How can i subtract row value from previous value and continue til end of table? rows have mx val

Sample data

 Part# Data Delta 1 0 0 - 0 2 0 0 - 0 3 0 0 - 0 1 9 0 - 9 2 23 0 - 23 3 45 0 - 45 1 1 9 - 1 2 34 23 - 34 3 56 45 - 56
Highlighted

## Re: How can i subtract row value from previous value and continue til end of table? rows have mx val

Here is how I would do it

``````Names Default To Here( 1 );

// Create the sample data table
dt = New Table( "Example",
New Column( "Part#", Character, "Nominal", Set Values( {"1", "2", "3", "1", "2", "3", "1", "2", "3"} ) ),
New Column( "Data",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [0, 0, 0, 9, 23, 45, 1, 34, 56] )
),
New Column( "Delta Pattern",
Character,
"Nominal",
Set Values( {"0 - 0", "0 - 0", "0 - 0", "0 - 9", "0 - 23", "0 - 45", "9 - 1", "23 - 34", "45 - 56"} )
)
);

// Add a new column to provide a path back to the original order
dt << New Column( "RowNum", formula( Row() ) );
// Delete the formula, so the values become static rather than calculated
dt:RowNum << delete formula;

// Sort the data by Part# and Row
dt << sort( by( Part#, :RowNum ), replace table( 1 ) );

// Create the new column with the delta values, which is pretty simple with all of
// the data sorted by Part#
dt << New Column( "Delta", formula( If( Lag( :Part# ) != Part#, 0, Lag( :Data ) - :Data ) ) );
// Delete formula so the values become static
dt:Delta << delete formula;

// Sort back into the original order
dt << sort( by( :RowNum ), replace table( 1 ) );

// Delete the Rownum column since it is no longer needed
dt << delete columns( "RowNum" );``````

There are otherways to do it too, but they would be slower to calculate

Jim
Highlighted

## Re: How can i subtract row value from previous value and continue til end of table? rows have mx val

Do I need to define "Delta Pattern" column?

Highlighted

## Re: How can i subtract row value from previous value and continue til end of table? rows have mx val

1. In my example, the column that you called "Delta", I change to be called "Delta Pattern".  I did that because I wanted the the results of the calculation to be placed into a column named "Delta", since the word delta refers to the difference.  So, what you need to do, to match what I did, is to change the name of the column in your starting data table from "Delta" to "Delta Pattern".
2. You have marked your latest response as a solution.  This is not a solution, but another question.  You need to remove the Solution selection from that item, and place on the item that actually shows the solution.
3. The assumption that I believe most of the individuals that respond to questions posted in the Community Discussion, is that what is presented back to the questioner, is examined and understood.  Not just copied and pasted into their solution without understanding what was provided for them.  And if in the examination of the response, something is not understood, then a question on that specific area is asked back to the community.  Therefore, the end result is learning, and movement by the questioner, to a point where they can start to contribute as a respondent to other community members.
Jim
Article Labels

There are no labels assigned to this post.