• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit Search
0

I want a formula to create reverse score for someone's entry when taking an assessment

New Here ,
Sep 24, 2022 Sep 24, 2022

Copy link to clipboard

Copied

I am creating an assessment with 10 questions where a person will have to choose a score between 0 and 4 for each question. This is a standard Likert scale of 0=never, 1=almost never, 2=sometimes, 3=faily often, 4=very often.

The assessment, however, has some questions that are "positive" questions and some that are "negative" questions. For example, "how often have you felt nervous and stressed" is a negative question while "how often have you felt confident" is a positve question. 

Then, when I tally the results within the form, I want to reverse their scores for every positve question such that:

- if they entered 0, what gets calculated in the total is a 4

- if they entered 1, what gets calculated in the total is a 3

- if they entered 2, what gets calculated in the total is still a 2

- if they entered 3, what gets calculated in the total is a 1

- if they entered 4, what gets calculated in the total is a 0

I don't know how to write java script so I'm hoping someone can just give me the actual string of text so I can copy it and paste it into my Adobe form creator.

And I assume this will go into the Custom Calculation Script of the calculate tab in the Text Field Properties.

Thaksn for any help.

TOPICS
PDF forms

Views

4.8K

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Sep 24, 2022 Sep 24, 2022

Copy link to clipboard

Copied

You could use something like this to reverse score:

Change "Field1","Field2","Field3" (add more fields names as needed) with fields names of which you want to reverse score.

var fields = ["Field1","Field2","Field3"];
var total = 0;
for(var i in fields){
var f = this.getField(fields[i]).valueAsString;
if(f==="0")total+=4;
if(f==="1")total+=3;
if(f==="2")total+=2;
if(f==="3")total+=1;}

Now you can use variable 'total' in calculation with rest of the fields.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Sep 24, 2022 Sep 24, 2022

Copy link to clipboard

Copied

Thank you for your quick reply. This is helpful but I think there may be something missing.

I have 10 questions, each will have a score from 0 to 4. Of those 10 questions, four of them will be reversed when I do a final tally calculation.

So, in the TOTAL field, I want to add Field1 + Field2 + Field3 + Reverse Field4 + Reverse Field 5 + Field 6 + Reverse Field7 + Reverse Field8 + Field9 + Field10.

using your formula above, how will I write this out?

(And will the code be placed into the "Custom Calculation Script" field of the calculate tab?)

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Sep 24, 2022 Sep 24, 2022

Copy link to clipboard

Copied

Yes, script goes to 'Custom calculation script'.

Try this:

 

var fields = ["Field4","Field5","Field7","Field8"];
var total = 0;
for(var i in fields){
var f = this.getField(fields[i]).valueAsString;
if(f==="0")total+=4;
if(f==="1")total+=3;
if(f==="2")total+=2;
if(f==="3")total+=1;}
var f1= Number(this.getField("Field1").valueAsString);
var f2= Number(this.getField("Field2").valueAsString);
var f3= Number(this.getField("Field3").valueAsString);
var f4= Number(this.getField("Field6").valueAsString);
var f5= Number(this.getField("Field9").valueAsString);
var f6= Number(this.getField("Field10").valueAsString);
var pos = f1+f2+f3+f4+f5+f6;
event.value = total+pos;

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Sep 24, 2022 Sep 24, 2022

Copy link to clipboard

Copied

I am trying it now...thank you. I'll write back in a few minutes. Something isn't workign right but it might be on my end. I'll write back soon.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Sep 24, 2022 Sep 24, 2022

Copy link to clipboard

Copied

Okay, I just tested it and confirmed that it is not working. 

I copied and pasted your commands string into the TOTAL field Custom Caluculation Script.

When I save teh file and then use it as a PDF Form, entering in values for all 10 fields, the TOTAL box remains empty. No addition happens. 

Attached is a screen shot.

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Sep 24, 2022 Sep 24, 2022

Copy link to clipboard

Copied

Check the JS Console (Ctrl+J) for errors. If you can't figure it out, share the file with us, please.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Sep 24, 2022 Sep 24, 2022

Copy link to clipboard

Copied

Thanks for your help, once again. I'm so impressed by the response time on this forum.

Attached is the file. I don't know what it means to check the JS Console to check for errors. As I mentioned, I copied and pasted your string of text exactly as provided. 

Please see attached.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Sep 24, 2022 Sep 24, 2022

Copy link to clipboard

Copied

It's not my code, but it should work, but it's generating an error, which you can see in the Console after editing the value of one of the fields. It says:

TypeError: this.getField(fields[i]) is null
4:Field:Calculate

This means you specified an incorrect field name in your script. Remember JS is case-sensitive, so make sure you spell the field names in the code EXACTLY as they appear in the file.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Sep 24, 2022 Sep 24, 2022

Copy link to clipboard

Copied

PS. Your job (and the usability of the form) will be much easier if you used drop-downs with the values 1-4, instead of open text fields...

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Sep 24, 2022 Sep 24, 2022

Copy link to clipboard

Copied

Thanks Try67. I think what you are saying is the JS Code error is poitning to incorrectly named fields...yes? 

Here is a screen shot where all the field names are on the right-hand side of the screen. 

The script that was provided had "field1"

Should it just be "1" because the name of that field is only the number 1

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Mar 02, 2023 Mar 02, 2023

Copy link to clipboard

Copied

Hello everyone! 

I've been following this thread to try to troubleshoot a custom calculation of my own to no avail and am wondering if you might help. I've attached my form. I'm working on getting the total scores for each chart on page 2 and 3 to calculate a total where half of the responses are reverse scored, and half are not. Here's my attempt for the "consciousness total" caluclation.

var fields = ["Careless","Disorganized","Inefficient","Sloppy"];
var total = 0;
for(var i in fields){
var f = this.getField(fields[i]).valueAsString;
if(f==="1")total+=9;
if(f==="2")total+=8;
if(f==="3")total+=7;
if(f==="4")total+=6;
if(f==="5")total+=5;
if(f==="6")total+=4;
if(f==="7")total+=3;
if(f==="8")total+=2;
if(f==="9")total+=1;
}

var f1= Number(this.getField("Efficient").valueAsString);
var f2= Number(this.getField("Organized").valueAsString);
var f3= Number(this.getField("Practical").valueAsString);
var f4= Number(this.getField("Systematic").valueAsString);
var pos = f1+f2+f3+f4+f5+f6+f7+f8;
event.value = total+pos;

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Mar 02, 2023 Mar 02, 2023

Copy link to clipboard

Copied

You didn't define variables f5,f6,f7,f8.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Mar 02, 2023 Mar 02, 2023

Copy link to clipboard

Copied

Thanks! Even when I did try that, it comes up NaN. Is it because my inputs are drop-downs?

 

var fields = ["Careless","Disorganized","Inefficient","Sloppy"];
var total = 0;
for(var i in fields){
var f = this.getField(fields[i]).valueAsString;
if(f==="1")total+=9;
if(f==="2")total+=8;
if(f==="3")total+=7;
if(f==="4")total+=6;
if(f==="5")total+=5;
if(f==="6")total+=4;
if(f==="7")total+=3;
if(f==="8")total+=2;
if(f==="9")total+=1;
}

var f1= Number(this.getField("Efficient").valueAsString);
var f2= Number(this.getField("Organized").valueAsString);
var f3= Number(this.getField("Practical").valueAsString);
var f4= Number(this.getField("Systematic").valueAsString);
var f6= Number(this.getField("Careless").valueAsString);
var f7= Number(this.getField("Disorganized").valueAsString);
var f6= Number(this.getField("Inefficient").valueAsString);
var f8= Number(this.getField("Sloppy").valueAsString);

var pos = f1+f2+f3+f4+f5+f6+f7+f8;
event.value = total+pos;

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Mar 02, 2023 Mar 02, 2023

Copy link to clipboard

Copied

You are still missing a f5 variable, and you have two f6 variables.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Mar 02, 2023 Mar 02, 2023

Copy link to clipboard

Copied

Ooops, okay. I fixed that but if the calculation were wokring correctly, If I set all the 4 reverse score dropdowns to 9, which would be equal to 1 and leave the rest of the drop downs set to 1, then the total should be 8, It's displaying 44. It seems unaffected entirely by changing the drop-down input.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Mar 02, 2023 Mar 02, 2023

Copy link to clipboard

Copied

That's how math works, 🙂 no matter what numbers you change from first 4 fields you will get 44, because that's how you set it up.

Total = 4, pos = 4+36 = 44, because pos variable adds 4*9 from first fields 9=1 only in total variable.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Mar 03, 2023 Mar 03, 2023

Copy link to clipboard

Copied

Thanks for your hellp. I guess I'm out of my depth with what I'm trying to do then. I want reverse scoring and addition, no multiplication. I'd like the "Careless","Disorganized","Inefficient","Sloppy" to be reverse whatever is inputted to the drop-down but it's not currently calculating that way from what you're saying. If a user inputs a 9, i'd like it to be added to the calculation as a 1. If they input an 8, it would be added to the calculation as a 2... and so on. The "Efficient","Organized","Practical" and "Systematic" fields would all be addded to the total based on the exact drop down number chosen, no reverse scoring. Then I'd like the total to be addition of all the fields. 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Mar 03, 2023 Mar 03, 2023

Copy link to clipboard

Copied

There are no multiplications, and I believe it does calculate correctly.

"Careless","Disorganized","Inefficient","Sloppy" lets say you select 9 for each of those fields

and "Efficient","Organized","Practical" and "Systematic" 1 for each of those fields, now 'total' variable will reverse all four 9 to 1 so total = 4, 'pos' will calculate 9+9+9+9+1+1+1+1 = 40 , total +pos = 44.

'pos' variable calculate 9 +9+9+9 because that is field's value it doesn't reverse it like 'total' does. Now if you change one of the 9 to 8 total will be 1+1+1+2=5 and pos will be 8+9+9+9+1+1+1+1=39 , 5+39 = 44,

No matter what number you choose from "Careless","Disorganized","Inefficient","Sloppy" you will get 44, only when you change numbers in "Efficient","Organized","Practical" and "Systematic" you will get different result but still then that result will not change event if you keep changing numbers from "Careless","Disorganized","Inefficient","Sloppy", because pos will always calculate it as 10, for example, if total =1 that means value of the field is 9 so pos is 10, if you select 4 total = 6 but real value is 4 so pos is 10 again, you see where this is going?

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Mar 03, 2023 Mar 03, 2023

Copy link to clipboard

Copied

If I set Careless, Disorganized, Inefficient and Sloppy drop-downs to 9, the output I need is 1 for each of them, If I keep the remaining fields at 1 then the total it should caluclate is 8. At the moment it calculates at 40. The range of scores should be 8 to 72. Is it the pos vaiable that's the issue?

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Mar 03, 2023 Mar 03, 2023

Copy link to clipboard

Copied

Every drop-down inputted should change the total score calculated. 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Mar 03, 2023 Mar 03, 2023

Copy link to clipboard

Copied

In that case, just give items in dropdown export value for 9 set export value 1, 8 export value 2...etc then just sum numbers in total same as pos. 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Mar 03, 2023 Mar 03, 2023

Copy link to clipboard

Copied

Then just remove the reverse scoring? 


var f1= Number(this.getField("Efficient").valueAsString);
var f2= Number(this.getField("Organized").valueAsString);
var f3= Number(this.getField("Practical").valueAsString);
var f4= Number(this.getField("Systematic").valueAsString);
var f5= Number(this.getField("Careless").valueAsString);
var f6= Number(this.getField("Disorganized").valueAsString);
var f7= Number(this.getField("Inefficient").valueAsString);
var f8= Number(this.getField("Sloppy").valueAsString);

var pos = f1+f2+f3+f4+f5+f6+f7+f8;
event.value = total+pos;

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Mar 03, 2023 Mar 03, 2023

Copy link to clipboard

Copied

Yes, just also add:

var total = f1+f2+f3+f4;

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Mar 03, 2023 Mar 03, 2023

Copy link to clipboard

Copied

Thanks for all your help, Nesa but I can't get it to work so I'll scrap the project. Take care. 

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines