Subscribe Bookmark RSS Feed

creating a new datasheet and copying values into it in JSL

fr2007

Community Trekker

Joined:

Jul 3, 2012

hi

i have a dataset with 50 numbers. I want to calculate the mean of the data set and place the mean value in a different new datasheet "Summary". Again I want to calculate sum of the 50 numbers and place it in the same new datasheet "Summary". Can some one help me how to place these mean and sum values in new datasheet "Summary"?

Thanks,

1 ACCEPTED SOLUTION

Accepted Solutions
Solution

Sorry, I inverted the fraction. It should read

fraction = k / N Rows( dt );

This fraction (a number between 0 and 1) is calculated only because the random selection requires a fraction argument.

Here is a version that also puts each subsample in the output table. After the mean and SD columns you should see ten columns with the ten randomly picked data for each iteration.

dt = Data Table( "Data" );

k = 10; //Set sample size

n = 100; //Set number of iterations

fraction = k / N Rows( dt );

m = J( n, 2 + k ); //Initiate a matrix for holding means and SDs

//Loop: make random subset n times

For( i = 1, i <= n, i++,

  dt << select randomly( fraction );

  m[i, 1] = Mean( dt:Data[dt << get selected rows] );

  m[i, 2] = Std Dev( dt:Data[dt << get selected rows] );

  m[i, 3 :: 2+ k] = transpose(dt:Data[dt << get selected rows]);

);

//Move data into new table

dt2 = As Table( m );

dt2 << set name( "Summary Data" );

Column( dt2, 1 ) << set name( "Mean" );

Column( dt2, 2 ) << set name( "StdDev" );

14 REPLIES
novicescriptor

Community Trekker

Joined:

Oct 1, 2012

Do you really mean to do this in JSL - i.e. to create a script that you can run to produce the summary? If you want to do this just one time interactively?  I will answer both:

Interactively:

Create your data table - in this case i call it RawData,

Click Table >> Tabulate

Click Data and then Mean and drag it to the output area

Click Sum and drag it to the output area

Click on red triangle of the report >> Make into Data Table, or just use the report directly (Cut and Paste)

Using JSL

After creating the above using Make Into Data Table, name the table (Summary Report is used here)

Click on the red triangle >> Copy Script

Create a new script (File>>New>>Script)

Paste your newly copied script into the new script window

Close your previous summary report

Run the script you just created

The summary report should pop up

An example i made with random data:

Script:

New Table( "Summary Report",

    Add Rows( 1 ),

    New Script(

        "Source",

        (Data Table( "RawData" ) << Tabulate(

            Add Table(

                Column Table( Statistics( Mean, Sum ), Analysis Columns( :Data ) )

            )

        )) << Make Into Data Table

    ),

    New Column( "Mean(Data)",

        Numeric,

        Continuous,

        Format( "Best", 5 ),

        Set Values( [171.936] )

    ),

    New Column( "Sum(Data)",

        Numeric,

        Continuous,

        Format( "Best", 5 ),

        Set Values( [8596.8] )

    )

)

Message me if you want my example files.

Barry

fr2007

Community Trekker

Joined:

Jul 3, 2012

Actually, I wanted to do this:-i posted this question in the forum too..

I have a data set with 1000 variables, continous numbers. I want to take a random subset from the dataset and calculate the mean and standard deviation of the subset and place in a separate excel file "B". I want to repeat this process -process of taking the subset of size 10 from the original dataset with 1000 variables and calculate mean and standard deviation and place in the same excel file "B". The final excel sheet shll contain all the means and standard deviations .

Iam not very sure if the script that you have given me can help in creating a new sheet in the above question..

i attached my sample data sheet ..

novicescriptor

Community Trekker

Joined:

Oct 1, 2012

I was looking at your second post - it is the same idea but i would create a new table collecting the samples of 10 into columns then produce a summary just once.  if no one else answers this i will answer this later today after I take care of people who pay my bills (an expectant lot )

fr2007

Community Trekker

Joined:

Jul 3, 2012

yes, I want to know how to create samples of 10 and if I were to create these samples of 10 multiple times(say more than 100), do I need to write it in a loop? How do I use loop here to create samples of 10 multiple times?

ms

Super User

Joined:

Jun 23, 2011

Here is one way. The loop incrementally fills a matrix that is converted into a datatable at the end.

dt = Data Table( "Data" );

k=10; //Set sample size

n = 100; //Set number of iterations

fraction = 1 - k / N Rows( dt );

m = J( n, 2 ); //Initiate a matrix for holding means and SDs

//Loop: make random subset n times

For( i = 1, i <= n, i++,

  dt << select randomly( fraction );

  m[i, 1] = Mean( dt:Data[dt << get selected rows] );

  m[i, 2] = Std Dev( dt:Data[dt << get selected rows] );

);

//Move data into new table

dt2 = As Table( m );

dt2 << set name( "Summary Data" );

Column( dt2, 1 ) << set name( "Mean" );

Column( dt2, 2 ) << set name( "StdDev" );

fr2007

Community Trekker

Joined:

Jul 3, 2012

somehow I couldnot see the final table with means and standard deviations..where is it created?

fr2007

Community Trekker

Joined:

Jul 3, 2012

can you please let me understand with this txt file. Sorry, but iam not much used to JSL,

novicescriptor

Community Trekker

Joined:

Oct 1, 2012

If you don't care about some repeats in some samples, there is a SUBSET command under TABLES that produce random samples:

          Subset( Sample Size( 10 ) )


that should produce the random 10 for each iteration.

As for the summary for each group, you can use STACK COMMAND to gather all data while preserving column (sampling group) names, then apply either tabulate or summary  by sample group.

i'd like too give all that in a script but my scripting is very slow.  may be later..

MS, excellent clean scripting, as always.

Barry 

fr2007

Community Trekker

Joined:

Jul 3, 2012


Thankyou everyone for helping me in JSL scripting...your skills are highly appreciated!